一、异常描述:
今天在整合ssh的时候,在配置Struts2框架之后,启动之后,项目报错抛异常:主要异常信息如下:
java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:532)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:514)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:142)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:107)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4775)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5452)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
二、异常分析:
从异常信息来看,出现的问题是找不到struts2的过滤器。
经过排查,原来,以前依赖的Struts2的jar包版本是2.3.24,而现在依赖的版本被我升级成2.5.10。这两个版本的struts2的过滤器所在位置是不相同的,但是我仍然使用的是2.3.24的路径,因此才会出现该异常。
三、解决方法:
解决方法:修改web.xml文件中的struts2过滤器的路径:
1、在struts2-core-2.3.24.jar中,struts2过滤器的配置为:
<!-- 配置strut2过滤器 版本2.3.24 -->
<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>
2、在struts2-core-2.5.10.1.jar中,struts2过滤器的配置应该改为:
<!-- 配置strut2过滤器 版本2.5.10.1-->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
重新启动项目,异常解决。
四、struts2-core-2.5.10.1版本的另一个问题:
当在struts.xml文件中配置使用通配符方式访问action的时候,出现了以下404错误。
查看该action,发现该action里面的方法确实存在,但是为什么会出现404呢?
原因是在struts2-core-2.5.10.1版本中,默认不被开启通配符,因此需要我们手动配置开启。
配置代码如下:
<action name="customerAction_*" class="customerAction" method="{1}">
<result name="success">/index.jsp</result>
<!-- struts2 2.5.10默认不使用通配符 使用下面代码开启 -->
<allowed-methods>regex:.*</allowed-methods>
</action>
重启项目,访问该action,问题解决。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/114716.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...