直接使用SpringMVC时配置访问jsp页面时很容易的事,但是由于spring Boot使用内嵌的servlet容器,所以对jsp的支持不是很好,而且也不建议使用jsp,但是为了满足这种返回jsp页面的需求同时又想享受Spring Boot免去各种配置的麻烦,经本各种试验,有两种方法可以供参考,在说明以下两种方法前首先声明所用的依赖如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
spring-boot-starter-web
是用来支持web应用开发的,在导入之后会自动导入内嵌的servlet容器,比如Tomcat
,但是要注意的是此时并没有能解析jsp页面的jasper模块,由此可以看出内嵌的servlet容器
并不是全部导入的,而是分模块部分导入的,Jasper需要我们手动导入。如果还要使用jstl库,也可以继续导入:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
1、在工程中返回jsp页面
由于Spring Boot的目录结构和普通的Web应用的目录结构是不同的,为了返回jsp,首先要建立对应的web应用程序目录,在/src/main
下建立WEB-INF/jsp
目录,形成/src/main/WEB-INF/jsp
,然后将我们的jsp页面放在下面即可。
然后再继续配置文件,如下:
application.properties
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
或者application.yml
spring:
mvc:
view:
prefix: /WEB-INF/jsp/
suffix: .jsp
这与只使用SpringMVC时的配置十分类似,而且可以看出使用的是InternalResourceViewResolver
视图解析器。使用代码测试一下:
@Controller
public class SpringBootController {
@RequestMapping("/index")
public String index(){
return "main";
}
}
以上会返回/src/main/WEB-INF/jsp/main.jsp
视图。
但是,返回页面只是在eclipse这种IDE中直接运行Spring Boot程序时会起作用,如果打包成jar包后是不会包含我们创建的WEB-INF/jsp
目录的,也就没有我们定义的jsp页面,所以会返回404状态码
,所以这种方法实际上是没有什么意义的,但可以解决:
①将打成jar包的方式改为war包
②修改pom.xml文件配置
<!-- 忽略无web.xml警告 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*</include>
</includes>
</resource>
<!-- 打包时将jsp文件拷贝到META-INF目录下-->
<resource>
<!-- 指定resources插件处理哪个目录下的资源文件 -->
<directory>src/main/webapp</directory>
<!--注意此次必须要放在此目录下才能被访问到-->
<targetPath>META-INF/resources</targetPath>
<includes>
<include>**/**</include>
</includes>
</resource>
③静态文件存放目录src/main/resources,默认的静态资源文件位置是/static下
jsp直接引用静态文件
<script src="jquery-3.1.1.min.js" type="text/javascript"></script>
<script src="main.js" type="text/javascript"></script>
④打成war包后运行,一切正常
2、在打包后返回jsp页面
如果想在打包后使用Java
来运行代码,就要使用如下这种方法,在/src/main/resources/
中建立如下的目录META-INF/resources/WEB-INF/jsp
,然后application.properties
的配置和第一种方法相同。但是这样在使用mvn package
打包后会包含上面建立的目录,如下:
这时使用java -jar SpringBootTemplate-0.0.1-SNAPSHOT.jar
就可以愉快地部署应用程序了,顺便说一句,此时在jsp页面也可以使用EL表达式获取Model中存储的数据了。
即使爬到最高的山上,一次也只能脚踏实地地迈一步。