问题描述
严重:Exceptionstartingfilterstruts2java.lang.ClassNotFoundException:org.apache.struts2.dispatcher.FilterDispatcheratorg.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1647)atorg.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1493)atorg.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:269)atorg.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)atorg.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115)atorg.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4038)atorg.apache.catalina.core.StandardContext.start(StandardContext.java:4692)atorg.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)atorg.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)atorg.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)atorg.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1041)atorg.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:964)atorg.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:502)atorg.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)atorg.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)atorg.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)atorg.apache.catalina.core.ContainerBase.start(ContainerBase.java:1061)atorg.apache.catalina.core.StandardHost.start(StandardHost.java:785)atorg.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)atorg.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)atorg.apache.catalina.core.StandardService.start(StandardService.java:525)atorg.apache.catalina.core.StandardServer.start(StandardServer.java:701)atorg.apache.catalina.startup.Catalina.start(Catalina.java:585)atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)atjava.lang.reflect.Method.invoke(Method.java:585)atorg.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)atorg.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)2011-3-1818:19:58org.apache.catalina.core.StandardContextstart严重:ErrorfilterStart2011-3-1818:19:58org.apache.catalina.core.StandardContextstart严重:Context[/struts2]startupfailedduetopreviouserrors2011-3-1818:19:58org.apache.coyote.http11.Http11Protocolstart信息:StartingCoyoteHTTP/1.1onhttp-80802011-3-1818:19:58org.apache.jk.common.ChannelSocketinit信息:JK:ajp13listeningon/0.0.0.0:80092011-3-1818:19:58org.apache.jk.server.JkMainstart信息:JkrunningID=0time=0/31config=null2011-3-1818:19:58org.apache.catalina.startup.Catalinastart信息:Serverstartupin4595ms我用myeclipse8.5M1struts-2.2.1.1的版本老是启动tomcat-6.0.30的时候控制台报错大侠给指导一下web.xml代码是:<?xmlversion="1.0"encoding="UTF-8"?><web-appversion="2.5"xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><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></web-app>-------------------------struts.xml代码是:<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN""http://struts.apache.org/dtds/struts-2.0.dtd"><struts><packagename="struts2"extends="struts-default"><actionname="login"class="com.test.struts2.LoginAction"><resultname="success"></result></action></package></struts>----------------------引入的包:commons-logging-1.0.4.jarxwork-core-2.2.1.1.jarstruts2-core-2.2.1.1.jarognl-3.0.jarfreemarker-2.3.16.jarcommons-io-1.3.2.jarcommons-fileupload-1.2.1.jarjavassist-3.7.ga.jar
解决方案
解决方案二:
你配置的FilterDispatcher类在哪?
解决方案三:
你找找你的jar中是否有org.apache.struts2.dispatcher.FilterDispatcher还它在哪里使用了找不到
解决方案四:
2.5之前的版本应该这么配吧<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class></filter>
解决方案五:
+1引用3楼prince_java的回复:
2.5之前的版本应该这么配吧XMLcode<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>……
解决方案六:
2。之后的版本好像可以用org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter这个作为过滤器类吧
解决方案七:
org.apache.struts2.dispatcher.FilterDispatcher这是struts2.2的核心拦截器!而你配置的确是这个org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter,改过来试试看!struts2-core-2.2.1.1.jar这个包里面两个拦截器都有,为什么使用第一个,而不是使用第二个,我目前还在研究中。。。。
解决方案八:
在网上找到的区别。FilterDispatcher是struts2.0.x到2.1.2版本的核心过滤器.!StrutsPrepareAndExecuteFilter是自2.1.3开始就替代了FilterDispatcher的.!这样的改革当然是有好处的.!为什么这么说.?应该知道如果我们自己定义过滤器的话,是要放在strtus2的过滤器之前的,如果放在struts2过滤器之后,你自己的过滤器对action的过滤作用就废了,不会有效!除非你是访问jsp/html!那我现在有需求,我必须使用Action的环境,而又想在执行action之前拿filter做一些事,用FilterDispatcher是做不到的.!那么StrutsPrepareAndExecuteFilter可以把他拆分成StrutsPrepareFilter和StrutsExecuteFilter,可以在这两个过滤器之间加上我们自己的过滤器.!给你打个比喻,现在有病人要做手术,现在struts2要做两件事,搭病床(环境),执行手术.!那么打麻药的工作呢.?不可能要病人站着打吧,所以必须有病床的环境,打完麻药之后再动手术.!这个比喻非常形象了.!本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/s_ongfei/archive/2010/08/13/5811070.aspx
解决方案九:
别人的源代码分析packageorg.apache.struts2.dispatcher.ng.filter;importorg.apache.struts2.StrutsStatics;importorg.apache.struts2.dispatcher.Dispatcher;importorg.apache.struts2.dispatcher.ng.PrepareOperations;importorg.apache.struts2.dispatcher.ng.ExecuteOperations;importorg.apache.struts2.dispatcher.ng.InitOperations;importorg.apache.struts2.dispatcher.mapper.ActionMapping;importjavax.servlet.*;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.io.IOException;/***HandlesboththepreparationandexecutionphasesoftheStrutsdispatchingprocess.Thisfilterisbettertouse*whenyoudon'thaveanotherfilterthatneedsaccesstoactioncontextinformation,suchasSitemesh.*/publicclassStrutsPrepareAndExecuteFilterimplementsStrutsStatics,Filter{privatePrepareOperationsprepare;privateExecuteOperationsexecute;//初始化过滤器publicvoidinit(FilterConfigfilterConfig)throwsServletException{InitOperationsinit=newInitOperations();//初始化辅助对象,封装了初始化的一些操作try{FilterHostConfigconfig=newFilterHostConfig(filterConfig);//对filterConfig进行封装init.initLogging(config);//通过config,初始化内部Struts的记录Dispatcherdispatcher=init.initDispatcher(config);//通过config,创建并初始化dispatcherinit.initStaticContentLoader(config,dispatcher);//通过config和dispatcher,初始化与过滤器相关的静态内容加载器prepare=newPrepareOperations(filterConfig.getServletContext(),dispatcher);//通过config和dispatcher,创建request被处理前的系列操作对象execute=newExecuteOperations(filterConfig.getServletContext(),dispatcher);//通过config和dispatcher,创建处理request的系列操作对象}finally{init.cleanup();//清空ActionContext}}publicvoiddoFilter(ServletRequestreq,ServletResponseres,FilterChainchain)throwsIOException,ServletException{HttpServletRequestrequest=(HttpServletRequest)req;HttpServletResponseresponse=(HttpServletResponse)res;try{prepare.createActionContext(request,response);//创建ACTIONCONTEXT,并初始化Theadlocalprepare.assignDispatcherToThread();//指派dispatcher给Theadlocalprepare.setEncodingAndLocale(request,response);//设置request的编码和LOCALrequest=prepare.wrapRequest(request);//封装requestActionMappingmapping=prepare.findActionMapping(request,response);//查找并选择创建ActionMappingif(mapping==null){//如果映射不存在booleanhandled=execute.executeStaticResourceRequest(request,response);//试图执行一个静态资源的请求if(!handled){chain.doFilter(request,response);}}else{//如果存在映射execute.executeAction(request,response,mapping);//执行action}}finally{prepare.cleanupRequest(request);//清除request的Threadlocal}}publicvoiddestroy(){prepare.cleanupDispatcher();}}
解决方案十:
肯定错误啊!应该这样配置!web.xml代码是:<?xmlversion="1.0"encoding="UTF-8"?><web-appversion="2.4"xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/classes/applicationContext.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><filter><filter-name>struts</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>
解决方案十一:
<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter>不是这个吧
解决方案十二:
web.xml头换成<?xmlversion="1.0"encoding="UTF-8"?><web-appversion="2.4"xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">