IntelliJ创建的Jakarta EE项目在Tomcat中返回404,GlassFish可正常运行
问题:Jakarta EE Web应用部署到Tomcat后点击链接触发404,GlassFish运行正常
问题详情
使用IntelliJ IDEA创建全新的Jakarta EE Web应用,未修改任何默认生成文件。通过war:exploded工件部署到Tomcat服务器后,仅能访问首页,点击首页默认链接时出现404错误;但相同配置部署到GlassFish服务器时,所有功能均正常运行。
复现步骤
- 使用IntelliJ IDEA创建新项目
- 创建Tomcat配置,在部署选项卡中选择
war:exploded工件 - 运行部署并在浏览器中访问对应URL
- 点击页面上的默认链接
- 出现404错误
- 为同一应用配置GlassFish服务器并运行
- 页面功能正常
已尝试操作
尝试更换所有可用部署工件,问题仍未解决。
解决建议
1. 核对Servlet路径映射与上下文根
- 检查项目中
web.xml或@WebServlet注解的路径配置,确保链接指向的路径与Servlet映射完全匹配。Tomcat对路径匹配规则严格,若使用相对路径,需确认IntelliJ IDEA中Tomcat部署的上下文根设置是否与访问路径前缀一致。 - 例如,若上下文根设为
/myapp,则链接需指向/myapp/xxx,而非直接/xxx。
2. 确认Tomcat版本与Jakarta EE兼容性
- Jakarta EE 9及以上版本使用
jakarta.*包名,Tomcat 9及以下仅支持javax.*的EE API。若项目为Jakarta EE 9+,必须使用Tomcat 10及以上版本,否则会因API包不兼容导致Servlet无法被识别,触发404错误。
3. 检查war:exploded工件完整性
- 前往项目输出目录(通常为
out/artifacts/[项目名]_war_exploded/),确认WEB-INF/classes目录下存在编译后的class文件,WEB-INF/lib包含必要依赖,且所有静态资源、配置文件齐全。若文件缺失,需重新构建工件。
4. 调整IntelliJ IDEA部署配置
- 在Tomcat运行配置的部署选项卡中,重新添加
war:exploded工件,确保部署路径指向Tomcat的webapps目录或正确的虚拟路径。 - 尝试勾选**"On 'Update' action"和"On frame deactivation"选项为"Update resources"或"Redeploy"**,避免部署缓存导致的问题。
内容的提问来源于stack exchange,提问作者Pavlos Orfanidis
相关产品推荐
相关产品推荐

