
Spring Boot 3.x 默认不再支持 JSP,且内嵌 Tomcat 无法正确加载 JSP;需移除返回值中的 .jsp 后缀,并确保视图解析器配置与实际文件路径严格匹配。
spring boot 3.x 默认不再支持 jsp,且内嵌 tomcat 无法正确加载 jsp;需移除返回值中的 `.jsp` 后缀,并确保视图解析器配置与实际文件路径严格匹配。
在 Spring Boot 3.x(如你使用的 3.1.1 版本)中,JSP 支持已被官方弃用并彻底移除。原因在于:Spring Boot 3 基于 Jakarta EE 9+(而非 Java EE 8),而主流嵌入式容器(如 Tomcat 10+)已将所有 javax.* 包迁移至 jakarta.*,但 JSP 引擎(Jasper)对 Jakarta EE 的兼容存在限制,且 Spring Boot 官方明确不推荐、也不提供开箱即用的 JSP 支持。
因此,即使你在 pom.xml 中添加了 jstl 和 spring-boot-starter-tomcat(甚至显式指定 provided 作用域),也无法让 return "ExibirU.jsp"; 正常工作——因为 Spring MVC 的 InternalResourceViewResolver 在 Spring Boot 3 下默认不启用,且 .jsp 后缀会被视为字面路径而非逻辑视图名。
✅ 正确做法是:
-
控制器返回值仅写逻辑视图名(不含扩展名):
@GetMapping("/exibirUsuario") public String exibirUsuario(Model model) { model.addAttribute("usuarios", usuarioDAO.getUsuarios()); return "ExibirU"; // ✅ 移除 ".jsp" } -
确保
application.properties中的视图配置有效(但注意:Spring Boot 3 不自动注册InternalResourceViewResolver):spring.mvc.view.prefix=/WEB-INF/jsp/ spring.mvc.view.suffix=.jsp
⚠️ 该配置仅在手动注册
ViewResolver时才生效。若未显式配置,Spring Boot 将忽略它。 -
(关键)手动注册
InternalResourceViewResolverBean(适用于 WAR 部署 + 外部 Tomcat 场景):@Configuration public class WebConfig { @Bean public ViewResolver viewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/jsp/"); resolver.setSuffix(".jsp"); resolver.setViewClass(JstlView.class); // 启用 JSTL 支持 return resolver; } }? 注意:
JstlView来自spring-webmvc,需确保jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api(非旧版javax.servlet:jstl)已在依赖中——但 Spring Boot 3 已不再托管该依赖,需自行引入。 文件路径必须严格匹配:
JSP 文件应位于src/main/webapp/WEB-INF/jsp/ExibirU.jsp(⚠️ 不是src/main/resources或static下)。webapp目录需作为 Web 资源根目录被 IDE 和 Maven 正确识别(IDEA 中右键 → Add as Web Module;Eclipse 中需配置 Deployment Assembly)。
❌ 常见错误排查:
- 使用
spring-boot-starter-thymeleaf或spring-boot-starter-freemarker替代 JSP(强烈推荐):更轻量、无容器依赖、天然支持 Spring Boot 3。 - 错误地将 JSP 放在
resources/templates(Thymeleaf 路径)或static(静态资源路径)下。 -
pom.xml中混用javax.*(如javax.servlet:jstl:1.2)——Spring Boot 3 要求jakarta.*,否则类加载失败。
? 总结:
在 Spring Boot 3.x 中,JSP 是“技术债”而非首选方案。若必须使用,需 WAR 打包 + 外部 Tomcat 10+,并手动配置 ViewResolver 与 Jakarta 兼容依赖;否则,请立即迁移到 Thymeleaf(零配置、模板热更新、HTML5 友好)——这是 Spring 官方当前主推的服务器端模板引擎。


















