使用IntelliJ生成的Jakarta EE项目部署TomEE 9.0返回404错误
排查TomEE 9.0部署404问题的关键方向
1. 修正Jakarta EE API依赖范围
TomEE作为Jakarta EE容器,已内置Web Profile全套API实现。若项目中jakarta.servlet-api、jakarta.web.jsp-api等依赖的范围设为compile,打包时这些API会被打入WAR,与TomEE自带API冲突,导致部署异常引发404。
解决:在pom.xml(Maven)或build.gradle中,将这类API依赖的范围改为provided:
<!-- Maven示例配置 --> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>5.0.0</version> <scope>provided</scope> </dependency>
2. 验证TomEE部署状态与日志
- 确认WAR已被TomEE正确解压至
webapps目录,解压后的目录名称需与上下文路径完全一致(注意大小写敏感)。 - 查看TomEE的
logs/catalina.out或localhost.log,搜索部署失败的异常信息(如类加载错误、配置文件解析失败),404通常是部署未完成的表象。
3. 检查web.xml命名空间配置
若项目使用传统web.xml,需确保根元素使用Jakarta EE 9+命名空间,而非旧Java EE命名空间:
<!-- 正确的Jakarta EE命名空间 --> <web-app xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd" version="5.0">
旧命名空间(http://xmlns.jcp.org/xml/ns/javaee)在TomEE 9中无法被正确识别,会导致应用初始化失败。
4. 排除IntelliJ部署配置干扰
- 在IntelliJ的Run/Debug配置中,进入TomEE服务器的「Deployment」标签,确认「Application context」与访问URL路径完全匹配(如设为
/demo,则访问地址应为http://localhost:8080/demo/index.jsp)。 - 尝试手动将WAR复制到TomEE的
webapps目录后启动服务器,排除IDE配置导致的部署异常。
5. 确认端口与根上下文配置
- 检查TomEE使用的端口(默认8080),访问时不要混淆端口号。
- 若将应用部署为
ROOT.war,访问路径应为http://localhost:8080/index.jsp,无需额外上下文路径。
内容的提问来源于stack exchange,提问作者Hoki Min
相关产品推荐
相关产品推荐

