TomEE与IntelliJ部署项目后出现404 Not Found问题求助
看起来你遇到的是部署成功但访问路径返回404的问题,结合你提供的日志和环境信息,咱们一步步来排查:
1. 确认实际的上下文路径
从你的日志里能看到两处关键信息:
30-May-2022 16:49:53.486 INFO [http-nio-8080-exec-4] org.apache.openejb.assembler.classic.Assembler.createApplication Deployed Application(path=/home/maggus/playground/TomEE/target/TomEE-1.0-SNAPSHOT)
[2022-05-30 04:49:53,804] Artifact TomEE:war exploded: Artifact is deployed successfully
这说明你用的是exploded模式部署(直接部署编译后的目录,不用手动打包war复制到webapps),TomEE实际部署的是target/TomEE-1.0-SNAPSHOT这个目录。而你访问的路径是/TomEE_war_exploded/,很大概率是上下文路径不匹配导致的404。
你可以先试试访问这个路径:http://localhost:8080/TomEE-1.0-SNAPSHOT/,看能不能正常打开。如果还是不行,去IntelliJ的Run/Debug配置里检查:
- 找到你的TomEE运行配置,切换到
Deployment标签页 - 查看
Application context字段的值,这个值就是访问时需要加在localhost:8080后面的路径,比如这里如果是/myapp,就访问http://localhost:8080/myapp/
2. 检查项目是否存在默认首页
如果上下文路径是对的,但访问根路径还是404,可能是你的项目里没设置默认访问页面。TomEE默认会优先找webapp根目录下的index.jsp、index.html、default.jsp这类文件作为首页。
你可以:
- 确认项目
src/main/webapp目录下有没有这类默认首页文件 - 如果没有,要么添加一个首页,要么直接访问具体的资源路径,比如
http://localhost:8080/[上下文路径]/your-servlet-mapping(这里的your-servlet-mapping是你在web.xml或者注解里配置的Servlet路径)
3. 确认TomEE的部署目录状态
虽然是exploded部署,IntelliJ有时候会在TomEE的webapps目录下生成对应上下文的符号链接或复制目录。你可以去~/software/apache-tomee-plume-8.0.11/webapps目录下看看:
- 有没有和你上下文路径同名的文件夹(比如
TomEE_war_exploded或者TomEE-1.0-SNAPSHOT) - 如果没有,可能是IntelliJ的部署配置有问题,你可以尝试在Run配置里点击
Apply后重新部署一次
4. 关于war包复制的说明
你提到不清楚怎么把war复制到webapps目录,其实在IntelliJ的exploded模式下,完全不需要手动复制war包——IntelliJ会自动把编译好的项目目录部署到TomEE指定的位置(要么是TomEE的webapps,要么是单独的部署目录)。如果要手动部署war包,你可以这么做:
- 如果是Maven项目,在IntelliJ里执行
mvn package,生成的war包会在target目录下;其他项目执行对应的打包命令即可 - 把生成的war包复制到
~/software/apache-tomee-plume-8.0.11/webapps目录下 - 重启TomEE,它会自动解压war包并部署,这时候访问路径就是war包的文件名(比如war包叫
myapp.war,就访问http://localhost:8080/myapp/)
先按上面的步骤排查,应该能找到问题所在~
内容的提问来源于stack exchange,提问作者Clueless

