Tomcat部署Struts WAR文件后无法访问登录页面求助
解决Struts WAR包部署Tomcat后Action映射404问题
根据你描述的场景,我帮你梳理几个核心排查方向和解决方案,应该能定位到问题:
1. 先修正访问路径(最可能的直接原因)
你已经把应用的Context路径设为/(根路径),所以正确的访问地址应该是http://localhost:8080/login.do,而不是带/iowe的路径。Tomcat会把根路径的应用直接映射到localhost:8080下,再加上/iowe相当于在根应用里找子路径,自然匹配不到对应的Action。
2. 检查Struts.xml的命名空间与Action配置
打开你的struts.xml,确认login Action的命名空间是否和请求匹配:
- 如果Action的配置是这样(命名空间为
/):
那直接访问<package name="default" namespace="/" extends="struts-default"> <action name="login" class="com.yourpackage.LoginAction"> <!-- 结果配置 --> </action> </package>http://localhost:8080/login.do是正确的。 - 如果命名空间设为
/iowe,那即使应用是根路径,也需要访问http://localhost:8080/iowe/login.do,但这种情况建议统一调整命名空间为/,避免路径混淆。
3. 确保WAR包内容完整且正确
解压你部署的WAR包,检查以下几点:
WEB-INF/classes目录下是否存在struts.xml,以及所有Action类的.class文件是否存在(Eclipse运行正常但打包时可能漏了编译文件)。WEB-INF/lib下是否包含所有Struts相关的依赖jar包,比如struts2-core.jar、xwork-core.jar等,缺少依赖会导致Struts初始化失败,无法加载Action映射。
4. 规范Tomcat的Context配置(避免冲突)
不建议直接修改server.xml的全局配置,容易引发冲突且重启后可能被覆盖,推荐两种更可靠的方式:
- 方式一:重命名WAR包
直接把你的WAR包改名为ROOT.war,Tomcat会自动将其部署为根路径应用,不需要任何额外配置。 - 方式二:使用局部Context配置
在Tomcat的conf/Catalina/localhost目录下创建ROOT.xml,内容如下(无需指定path,文件名ROOT.xml就对应根路径):
注意删除<Context docBase="iowe" reloadable="true"/>server.xml里之前添加的<Context>配置,避免冲突。
5. 检查Struts过滤器的Web.xml配置
确认WEB-INF/web.xml里的Struts过滤器拦截路径是/*,确保所有请求都能被Struts处理:
<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
6. 查看Tomcat日志定位细节
如果以上步骤都没解决问题,去Tomcat的logs目录查看:
localhost.log:查看Struts初始化时是否有报错,比如找不到配置文件、类加载失败等。localhost_access_log.*.txt:确认请求是否真的到达了你的应用,以及请求路径是否正确。
内容的提问来源于stack exchange,提问作者vr3w3c9
相关产品推荐
相关产品推荐

