Springboot 3.x 项目使用 JSP 笔记

前言
首先需要说明!这是一个不被推荐的操作!
官方推荐用thymeleaf等模板引擎做页面渲染
JSP默认状态是不开启,需要手动配置后才能使用
本文只讲配置过程,这样用是否合理看你的具体业务需求
折腾
开发工具 IntelliJ IDEA 2023.2.4 (Ultimate Edition)
新建项目(必须war包)

第二步, 选择 Lombok Spring Web

错误打开方式
直觉上这里在 resources/static 下新建 index.jsp 启动项目
发现访问 http://localhost:8080/index.jsp
结果404
正确打开方式
再次强调一下开局创建项目必须选war包,这个坑我爬了好久
大致思路:
1. 首先第一个思路是要让jsp可以正常被访问到
2. 进阶版要结合spirngboot提前查数据塞数据传给jsp渲染
具体操作
删了一些用不到的文件文件夹maven加依赖
(我直接发了完整的依赖如下)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!-- 下面是新增的依赖 -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>6.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jakarta.servlet.jsp.jstl</artifactId>
<version>3.0.0</version>
</dependency>
main目录下新建文件夹 webapp
webapp下新建文件 index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%="666"%>
</body>
</html>
启动项目,访问http://localhost:8080/index.jsp
这里已经可以看到访问成功了。

到这一步时项目路径文件位置关系如下
springboot-jsp/
|-- src/
| |-- main/
| | |-- java/
| | | |-- com.example.springbootjsp/
| | | | |-- ServletInitializer.java
| | | | |-- SpringbootJspApplication.java
| | |-- resources/
| | | |-- application.yml
| | |-- webapp/
| | | |-- index.jsp
`-- pom.xml
继续改进到可以和controller联动
修改springboot配置
application.yml
server:
port: 8080
servlet:
context-path: /
spring:
mvc:
view:
prefix: /
suffix: .jsp
新建 controller/JSPController.java
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class JSPController {
@GetMapping("/index")
public String index(Model model) {
model.addAttribute("message","测试springboot-jsp传参");
return "index";
}
}
修改 index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="c" uri="jakarta.tags.core" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${message}
</body>
</html>
重启项目访问 http://localhost:8080/index
可以看到后端注入的参数

更多的spring搭配jsp用法可以参考文末的 JSP and JSTL 链接查看官方文档
END
总结:虽说这种方法不被官方推荐,但自己写写练手的项目正合适,再学 Themeleaf or Freemaker 头都学秃了
