Spring Boot集成JSP

时间:2022-06-01 18:47:50

Spring Boot是不推荐使用JSP作为模板文件。如果Spring Boot使用JSP是有一些限制,其中只能打包成可执行的war包或者可在外部容器(如tomcat)部署的war包。

项目目录结构

在普通的spring boot项目基础上,在src/main下新增目录webapp/WEB-INF/jsp用来存放jsp文件,静态文件存放在/src/resources/static。结构如图:

Spring Boot集成JSP

添加依赖

<!--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错误