Struts2的2.5.10版本找不到StrutsPrepareAndExecuteFilter过滤器 与 struts.xml文件通配符异常问题
一、異常描述:
今天在整合ssh的時(shí)候,在配置Struts2框架之后,啟動(dòng)之后,項(xiàng)目報(bào)錯(cuò)拋異常:主要異常信息如下:
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)
二、異常分析:
從異常信息來看,出現(xiàn)的問題是找不到struts2的過濾器。
經(jīng)過排查,原來,以前依賴的Struts2的jar包版本是2.3.24,而現(xiàn)在依賴的版本被我升級(jí)成2.5.10。這兩個(gè)版本的struts2的過濾器所在位置是不相同的,但是我仍然使用的是2.3.24的路徑,因此才會(huì)出現(xiàn)該異常。
三、解決方法:
解決方法:修改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過濾器的配置應(yīng)該改為:
<!-- 配置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>重新啟動(dòng)項(xiàng)目,異常解決。
?
四、struts2-core-2.5.10.1版本的另一個(gè)問題:
當(dāng)在struts.xml文件中配置使用通配符方式訪問action的時(shí)候,出現(xiàn)了以下404錯(cuò)誤。
?查看該action,發(fā)現(xiàn)該action里面的方法確實(shí)存在,但是為什么會(huì)出現(xiàn)404呢?
原因是在struts2-core-2.5.10.1版本中,默認(rèn)不被開啟通配符,因此需要我們手動(dòng)配置開啟。
配置代碼如下:
<action name="customerAction_*" class="customerAction" method="{1}"><result name="success">/index.jsp</result><!-- struts2 2.5.10默認(rèn)不使用通配符 使用下面代碼開啟 --><allowed-methods>regex:.*</allowed-methods> </action>重啟項(xiàng)目,訪問該action,問題解決。
總結(jié)
以上是生活随笔為你收集整理的Struts2的2.5.10版本找不到StrutsPrepareAndExecuteFilter过滤器 与 struts.xml文件通配符异常问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用maven整合SSH框架详细步骤
- 下一篇: SSM整合支付宝支付功能