正如摘要所述,本教程旨在帮助开发者在 Spring Boot 项目中正确配置和使用 JSP 视图技术。由于 Spring Boot 对 JSP 的支持存在一些限制,尤其是在使用嵌入式 Servlet 容器并打包为可执行 JAR 文件时,本文将详细介绍如何通过 WAR 打包方式来规避这些限制,并提供必要的配置步骤和注意事项,确保 JSP 能够正常工作。同时,也建议开发者在条件允许的情况下,考虑使用更现代化的模板引擎。
在开始之前,请确保你已经安装了以下软件:
Spring Boot 官方文档明确指出,在使用嵌入式 Servlet 容器(如 Tomcat 或 Jetty)并将应用程序打包为可执行 JAR 文件时,JSP 的支持存在一些限制。具体来说:
为了在 Spring Boot 中使用 JSP,你需要执行以下步骤:
修改 pom.xml 或 build.gradle 文件:
Maven (pom.xml):
... war ...... org.apache.tomcat.embed tomcat-embed-jasperprovided javax.servlet jstl
Gradle (build.gradle):
plugins {
...
id 'war'
...
}
dependencies {
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
implementation 'javax.servlet:jstl'
}将 packaging 设置为 war,并将 spring-boot-starter-tomcat 的 scope 设置为 provided,这意味着 Tomcat 容器将由外部提供,而不是打包到应用程序中。同时,添加 jstl 依赖,以便在 JSP 中使用 JSTL 标签库。
配置视图解析器:
在 application.properties 或 application.yml 文件中,配置视图解析器的前缀和后缀。这告诉 Spring Boot 在哪里查找 JSP 文件。
spring.mvc.view.prefix=/WEB-INF/jsp/ spring.mvc.view.suffix=.jsp
这表示 JSP 文件应该位于 src/main/webapp/WEB-INF/jsp/ 目录下,并且文件扩展名为 .jsp。
创建 JSP 目录:
在 src/main/webapp/ 目录下创建 WEB-INF/jsp/ 目录。这是存放 JSP 文件的默认位置。
创建 Controller:
创建一个 Spring MVC Controller 来处理请求并返回 JSP 视图的名称。
@Controller
public class FirstController {
@GetMapping("/")
public String sayHello() {
return "hello"; // 返回 JSP 视图的名称
}
}创建 JSP 文件:
在 src/main/webapp/WEB-INF/jsp/ 目录下创建一个名为 hello.jsp 的文件。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Hello
Hello, World!
以下是一个完整的 Spring Boot 项目结构示例:
MyLibrary/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── lib/ │ │ │ └── secondtry/ │ │ │ ├── MyLibraryApplication.java │ │ │ └── FirstController.java │ │ ├── resources/ │ │ │ └── application.properties │ │ └── webapp/ │ │ └── WEB-INF/ │ │ └── jsp/ │ │ └── hello.jsp │ └── test/ │ └── java/ │ └── com/ │ └── lib/ │ └── secondtry/ │ └── MyLibraryApplicationTests.java ├── pom.xml
虽然 Spring Boot 对 JSP 的支持存在一些限制,但通过使用 WAR 打包方式,你可以成功地在 Spring Boot 项目中使用 JSP。 然而,考虑到 JSP 的局限性,建议在条件允许的情况下,选择更现代化的模板引擎,以便获得更好的开发体验和更高的性能。