运行环境:Linux
jdk版本:1.8.0_331
容器版本:apache-tomcat-8.5.78
背景:
有个较早的项目,使用struts2+spring。因测试需要,需在linux上搭建环境。
现象:
搭建完成后,有的菜单可以跳转,有的菜单跳转报错。
排查:
1 考虑web.xml配置问题。经查,跳转成功的菜单都是以.do结尾的,失败的菜单是以servlet结尾。基于此,查找servlet在web.xml中的相关配置,发现也有,拦截所有请求/*,懵了;
2 查找struts2的配置,跳转成功的菜单,均有action配置,而失败的,没有。究其原因,是因为失败菜单是配置的是一个类名,如/demo/com.****.servlet格式。打断点在该类,断点无法跳入。
至此,问题找到。
原因:
经多方咨询及网络查找,最终确定问题如下:
tomcat6.0以后,去掉了其conf/web.xml文件中对于无配置servlet的自动解析。 org.apache.catalina.servlets.InvokerServlet,因其存在安全隐患。
而我们恰好使用的是tomcat 8,没有这个自动解析类。所以报错了。
解决方案:
使用tomcat 6.0 重新搭建环境,问题解决。