
正如摘要所述,本教程旨在帮助开发者在 Spring Boot 项目中正确配置和使用 JSP 视图技术。由于 Spring Boot 对 JSP 的支持存在一些限制,尤其是在使用嵌入式 Servlet 容器并打包为可执行 JAR 文件时,本文将详细介绍如何通过 WAR 打包方式来规避这些限制,并提供必要的配置步骤和注意事项,确保 JSP 能够正常工作。同时,也建议开发者在条件允许的情况下,考虑使用更现代化的模板引擎。
前提条件
在开始之前,请确保你已经安装了以下软件:
- JDK (Java Development Kit) 8 或更高版本
- Maven 或 Gradle 构建工具
- 一个 IDE,例如 IntelliJ IDEA 或 Eclipse
Spring Boot 中 JSP 的限制
Spring Boot 官方文档明确指出,在使用嵌入式 Servlet 容器(如 Tomcat 或 Jetty)并将应用程序打包为可执行 JAR 文件时,JSP 的支持存在一些限制。具体来说:
- WAR 打包是关键: 如果使用 Jetty 或 Tomcat,只有使用 war 打包方式才能保证 JSP 的正常工作。可执行的 WAR 文件可以通过 java -jar 命令启动,也可以部署到任何标准的 Servlet 容器中。
- JAR 包不支持 JSP: 当使用可执行 JAR 文件时,JSP 不被支持。
- Undertow 不支持 JSP: Undertow 嵌入式 Servlet 容器不支持 JSP。
- 自定义错误页面: 创建自定义的 error.jsp 页面并不能覆盖默认的错误处理视图。应使用自定义的错误页面配置来处理错误。
配置步骤
为了在 Spring Boot 中使用 JSP,你需要执行以下步骤:
-
修改 pom.xml 或 build.gradle 文件:
-
Maven (pom.xml):
... war ... ...org.apache.tomcat.embed tomcat-embed-jasper provided 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
注意事项
- 确保你的 JSP 文件位于正确的目录下 (src/main/webapp/WEB-INF/jsp/)。
- 使用 WAR 打包方式。
- 检查 application.properties 或 application.yml 文件中的视图解析器配置是否正确。
- 如果遇到 404 错误,请检查你的 Controller 是否正确映射了请求路径。
- 尽量避免使用 JSP,可以考虑使用 Thymeleaf 或 FreeMarker 等更现代化的模板引擎。
总结
虽然 Spring Boot 对 JSP 的支持存在一些限制,但通过使用 WAR 打包方式,你可以成功地在 Spring Boot 项目中使用 JSP。 然而,考虑到 JSP 的局限性,建议在条件允许的情况下,选择更现代化的模板引擎,以便获得更好的开发体验和更高的性能。










