IDEA下用Tomcat正常启动Spring MVC项目,但把war包放入webapps下却访问404
问题描述: 如题,自己的问题非常具有特殊性…
出错原因:
- 混淆了IDEA下配置的Application Context与直接部署在webapps下的项目的url的相互关系
- 误写了拦截器的Response方法
具体过程:

在IDEA下配置的tomcat的这个Application context对生成的war是没有关系的,图中是war exploded,war也是一样的。但是如果我们用IDEA来启动项目,确实通过url访问到的就是我们配置后的url。
在用IDEA启动项目后,war包并没有部署到了tomcat的webapps,而是直接在项目下生成了target,那么IDEA肯定是除了“告诉”tomcat你要deploy这个war包还有修改某些配置文件,至于修改了什么下面再讲。
如果直接把war包部署在webapps下,那么url就是 “域名/<war包的名字>”。
而如果这样,我也就不会一直报404了,中间经过了很多尝试都不奏效,最后还是学长帮我找出了问题所在(超级感谢)。
httpServletResponse.sendRedirect(httpServletRequest.getContextPath() + "/login");
如上是正确写法…而我自己写的时候并没有去获取contextPath,而是直接用了配置在IDEA中的Application Context。所以矛盾就出现了,也就出现了如题的问题描述,在IDEA下Application Context就是我写死在重定向中的url,就不会有问题,而通过war包放入webapps下的项目,它的Application Context是war包的名字,那么我重定向再去定那个写死的url自然就是404了。
说完了问题的病根和解决方法,我们还是希望部署在webapps下面的war对应的Application Context的是我们希望的那个,所以就要找到怎么修改。
好吧…暂时还没找到怎么修改…
可能需要二级url的真的不多吧?
本文介绍了在IDEA中使用Tomcat启动Spring MVC项目正常,但将war包部署到webapps目录下出现404错误的原因。问题源于IDEA的Application Context与war包部署后的URL不一致,以及拦截器响应方法的错误。解决方案是理解并正确设置Application Context,以确保与war包部署时的路径匹配。
3093

被折叠的 条评论
为什么被折叠?



