JDK 17迁移后JSP内容不可见及请求映射缺失问题排查
JDK 17迁移后JSP无法显示及请求映射问题解决
问题概述
迁移至JDK 17后出现JSP内容无法显示,同时Spring MVC抛出请求映射未找到警告:
WARN [org.springframework.web.servlet.PageNotFound] (default task-4) No mapping for POST /VisitVerification/allmodal.ac
WARN [org.springframework.web.servlet.PageNotFound] (default task-5) No mapping for POST /VisitVerification/main.action
当前使用的依赖为Jakarta Servlet 6.0及JSTL 3.0系列:
<dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>6.0.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>jakarta.servlet.jsp.jstl</groupId> <artifactId>jakarta.servlet.jsp.jstl-api</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>org.glassfish.web</groupId> <artifactId>jakarta.servlet.jsp.jstl</artifactId> <version>3.0.1</version> </dependency>
JSP中仍使用旧版标签库声明,询问是否需要修改:
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <% String ProfileName = (String)session.getAttribute("ProfileName"); %>
核心修复步骤
1. 必须更新标签库URI
Jakarta EE 9+(对应JSTL 3.0、Spring 6.x)已废弃原Java EE时代的标签库URI,需替换为Jakarta版本:
- JSTL核心标签库:将
http://java.sun.com/jsp/jstl/core替换为https://jakarta.ee/xml/ns/jakartaee/jstl/core - Spring标签库:Spring 6.x适配Jakarta后,URI已更新为
https://www.springframework.org/tags
修改后的标签库声明:
<%@ taglib uri="https://www.springframework.org/tags" prefix="spring" %> <%@ taglib prefix="c" uri="https://jakarta.ee/xml/ns/jakartaee/jstl/core" %>
2. 请求映射警告排查
JSP无法显示大概率和标签库失效导致页面渲染异常直接相关,先修复标签库后验证页面是否恢复。若仍存在映射警告:
- 检查对应请求的Controller方法:确保使用Jakarta Servlet API(导入
jakarta.servlet.*而非javax.servlet.*),且@RequestMapping路径与请求路径完全匹配(包括后缀.ac/.action) - 确认Spring MVC配置:检查
DispatcherServlet的url-pattern是否覆盖这类后缀路径,或是否配置了路径匹配规则允许解析.ac/.action
3. 兼容性验证
- 确保Spring版本为6.x或Spring Boot 3.x:旧版Spring不支持Jakarta Servlet 6.0
- 若使用
web.xml,需迁移为Jakarta版本:根元素改为<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee">,替换所有javax.servlet相关配置为jakarta.servlet
内容的提问来源于stack exchange,提问作者c arivu
相关产品推荐
相关产品推荐

