Spring Boot是不推荐使用JSP作为模板文件。如果Spring Boot使用JSP是有一些限制,其中只能打包成可执行的war包或者可在外部容器(如tomcat)部署的war包。
项目目录结构
在普通的spring boot项目基础上,在src/main下新增目录webapp/WEB-INF/jsp用来存放jsp文件,静态文件存放在/src/resources/static。结构如图:
添加依赖
<!--WEB支持-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--jsp页面使用jstl标签-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!--用于编译jsp-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
这里添加的依赖不需要自定义依赖包的版本,这些依赖由spring-boot统一管理。
其中tomcat-embed-jasper的scope为provided,意思是在编译时使用,在运行时由运行的容器(如tomcat)提供。
spring-boot web项目打包默认会把内嵌的tomcat容器打包进去,如果需要部署到外部的tomcat,需要把内嵌的tomcat排除。
添加依赖如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
修改打包方式
在pom.xml设置打包方式为war
<packaging>war</packaging>
如果不想使用项目名打包,在pom.xml设置打包后的名字:
<build>
<finalName>demo</finalName>
</bulid>
application.properties配置
在application.properties添加以下配置:
spring.mvc.view.prefix: /WEB-INF/jsp/
spring.mvc.view.suffix: .jsp
这个指定jsp文件的前缀和后缀
启动类
@SpringBootApplication
public class DemoApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(DemoApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
SpringBootServletInitializer提供了以编程的方式配置web.xml。
Controller
@Controller
public class HomeController {
@GetMapping("/")
public ModelAndView index() {
User a = new User("张三",10);
User b = new User("李四", 11);
User c = new User("王五", 12);
List users = Arrays.asList(a,b,c);
ModelAndView mv = new ModelAndView("index");
mv.addObject("users", users);
return mv;
}
}
index.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page language="java" pageEncoding="UTF-8"%>
<html>
<head>
<meta charset="UTF-8">
<title>Demo</title>
</head>
<body>
<ul>
<c:forEach items="${users}" var="user">
<li>${user.name}</li>
</c:forEach>
</ul>
</body>
</html>
内嵌tomcat容器
在开发过程中使用内嵌tomcat容器,在application.properties配置如下:
#配置程序端口,默认为8080
server.port= 8080
#用户绘画session过期时间,以秒为单位
server.session.timeout=
# 配置默认访问路径,默认为/
server.context-path=
启动
spring-boot:run
直接运行启动类,访问页面报404错误