前几天在自己写springboot项目的时候遇到个棘手 的问题,就是我访问项目url的时候本来应该跳转到jsp页面呢,然而却变成了下载文件(如图)

ios手机 前端实现下载pdf_微服务

打开文件一看竟然是我要访问的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的解析器(众所周知)。所以大家在搭建环境的时候要根据具体的版本信息来添加依赖。