前几天在自己写springboot项目的时候遇到个棘手 的问题,就是我访问项目url的时候本来应该跳转到jsp页面呢,然而却变成了下载文件(如图)
打开文件一看竟然是我要访问的jsp页面内容。感到很奇怪,于是就仔细检查代码,检查是否加上了responseBody
是否把路径写作了,配置文件里是否有错误问题,找了半天都没有发现问题,百度了一番,说是没有加入jsp的相关依赖。然后就尝试着加入下边的依赖。
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jsp-api</artifactId>
</dependency>
尝试重新启动一下,果然就好了,此时我的springboot版本是
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.BUILD-SNAPSHOT</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
但是通过一番研究和观察发现,对于下边这个版本根本不需要上边的操作仍然正常可以访问项目的jsp页面。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.5.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
这里明显就是RELEASE与SNAPSHOT的问题了,然后了解了一下,大概意思就是SNAPSHOT是不稳定版本,正在开发当中,RELEASE是稳定版本。
Snapshot版本代表不稳定、尚处于开发中的版本,快照版本。
Release版本则代表稳定的版本,发行版本。
什么时候用Snapshot版本?
依赖库中的jar正处于开发的阶段,会被经常被更新,这种情况下,如果使用Release,会频繁增加版本号,导致版本号的滥用。
在上传jar时,选择Snapshot和Release上传时,在版本号的构建上有所不同,
上传同样的版本号jar包时,Snapshot在版本号的后面会自动追加一串新的数字,就是所谓的日期标签,这样在不断更新jar包时,可以不用每次都要将版本号提高一个版本,可以有效的维护版本号。
稳定版使用Snapshot版本行不行?
不行,因为会造成不稳定。比如说,今天你依赖某个snapshot版本的第三方库成功构建了自己的应用,明天再构建时可能就会失败,因为今晚第三方可能已经更新了它的snapshot库。你再次构建时,Maven会去远程repository下载snapshot的最新版本,你构建时用的库就是新的jar文件了,这时正确性就很难保证了。稳定版应该依赖Release版本的jar包,这样更新时需要更新版本号,版本号没变时,依赖的jar包也不会变。
我自己的个人看法就是不稳定版本它没有完全集成jsp视图解析,稳定版本集成了jsp的解析器(众所周知)。所以大家在搭建环境的时候要根据具体的版本信息来添加依赖。