Eclipse 2022-06报Java构建路径未找到HttpServlet错误
问题背景
- 开发工具:Eclipse IDE for Enterprise Java and Web Developers 2022-06 (4.24.0)
- 运行适配:基于Jakarta类库开发,适配Tomcat 10运行环境
- POM中JSTL依赖配置:
<!-- JSTL Jakarta 实现 --> <dependency> <groupId>org.glassfish.web</groupId> <artifactId>jakarta.servlet.jsp.jstl</artifactId> <version>2.0.0</version> </dependency>
- 报错现象:所有引入taglib的JSP文件都提示错误:
The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path,当前使用的taglib引入代码:
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x"%> <%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> <%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
- 排查现状:已经尝试过多种公开修复方案,包括调整项目构建路径、关联服务器运行时等常见操作,前后耗时2天排查未解决,但项目在本地Tomcat环境及生产服务器上均可正常运行。
修复步骤
报错核心原因是Eclipse内置的JSP静态校验器无法识别旧版JSTL URI到Jakarta命名空间的兼容映射,默认拉取旧Java EE规范下的javax.servlet.http.HttpServlet类,和项目实际使用的Jakarta EE 9+的jakarta.servlet包不匹配,按以下顺序操作即可解决:
- 替换JSTL标签库URI为Jakarta官方标准地址,旧的
http://java.sun.com/jsp/jstl/*是Java EE时代的遗留地址,仅靠运行时容器兼容支持,静态校验无法识别,替换后代码如下:
<%@taglib uri="jakarta.tags.core" prefix="c"%> <%@taglib uri="jakarta.tags.xml" prefix="x"%> <%@taglib uri="jakarta.tags.fmt" prefix="fmt"%> <%@taglib uri="jakarta.tags.functions" prefix="fn"%>
- 校验项目关联的运行时配置:右键项目打开
Properties面板,进入Targeted Runtimes配置页,勾选本地配置的Tomcat 10运行时,取消勾选所有Tomcat 9及以下版本的运行时,点击Apply保存。 - 清理校验缓存:右键项目选择
Validate触发全量校验,校验完成后点击顶部菜单栏Project -> Clean,选中当前项目执行清理操作。 - 排查依赖冲突:打开POM文件的依赖树视图,排查是否存在
javax.servlet、javax.servlet.jsp.jstl相关的旧版Java EE依赖,如果存在直接添加排除规则,确保项目构建路径中仅存在scope为provided的jakarta.servlet-api相关依赖。 - 强制更新Maven项目:右键项目进入
Maven -> Update Project菜单,勾选Force Update of Snapshots/Releases选项,点击OK等待更新完成即可。
以上操作完成后Eclipse中的JSP报错会直接消除,不会影响项目原有运行逻辑。
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

