我對(duì)異常拋出的情況作啦一個(gè)總結(jié),下面的是我在做項(xiàng)目的時(shí)候,處理拋出來的經(jīng)典異常。
嚴(yán)重: action: null
java.lang.ClassNotFoundException: org.springframework.web.struts.ContextLoaderPlugIn
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
at org.apache.struts.util.RequestUtils.applicationClass(RequestUtils.java:124)
at org.apache.struts.util.RequestUtils.applicationInstance(RequestUtils.java:172)
at org.apache.struts.util.RequestUtils.applicationInstance(RequestUtils.java:147)
at org.apache.struts.action.ActionServlet.initModulePlugIns(ActionServlet.java:842)
at org.apache.struts.action.ActionServlet.init(ActionServlet.java:359)
at javax.servlet.GenericServlet.init(GenericServlet.java:212)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1172)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:992)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4058)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4371)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:627)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:511)
at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1231)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:297)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:836)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:761)
at org.apache.catalina.manager.ManagerServlet.check(ManagerServlet.java:1471)
at org.apache.catalina.manager.ManagerServlet.deploy(ManagerServlet.java:824)
at org.apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.java:350)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
2009-6-13 19:47:25 org.apache.catalina.core.ApplicationContext log
這個(gè)異常我看不少人都遇到吧,看著這個(gè)異常,你覺得是不是很郁悶,剛開始看到這個(gè)action: null就想:“是Struts里出啦問題,肯定是參數(shù)不對(duì)應(yīng)ActionForm造成的吧!”然后就拼命地在頁(yè)面和ActionForm來作對(duì)照,對(duì)來對(duì)去都是一樣啊!怎么還是有錯(cuò)呢?剛剛開始我也是這樣想的,可是做啦一大堆的無用功后,就發(fā)現(xiàn)我這種想法是錯(cuò)的!每次部署后還是這個(gè)錯(cuò),你再細(xì)心地看下面的那個(gè)錯(cuò)誤“java.lang.ClassNotFoundException: org.springframework.web.struts.ContextLoaderPlugIn”,這個(gè)org.springframework.web.struts.ContextLoaderPlugIn這個(gè)東西是不是很熟悉呢?仔細(xì)找下看,發(fā)現(xiàn)你的Struts-config.xml里面是不是也有這樣一段話:
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/applicationContext.xml"/>
</plug-in>
問題就出在這里啦!不過有些人找到問題所在后,也不會(huì)認(rèn)為這里有問題,就算這里有問題,最多就是Spring的配置文件不對(duì)應(yīng)!然后就去修改一下配置文件,可是還是于是無補(bǔ)!
我經(jīng)過一段時(shí)間的思考后,就想啦一下,這個(gè)既然是Spring的配置文件,那一定和它的插件有關(guān),是不是Spring和Struts整合不好呢?然后就查了一下庫(kù)文件,發(fā)現(xiàn)Spring庫(kù)文件導(dǎo)入的是很少!上網(wǎng)查下資料,發(fā)現(xiàn)對(duì)于這個(gè)問題的很少有答案,有人提出的可是找不到問題所在!我就去啦Spring的官網(wǎng)下載它的庫(kù)文件和一些相應(yīng)的資料來,在找資料的過程中,我也下載啦一個(gè)叫spring-struts.jar的庫(kù)文件,這個(gè)文件看起來好象是Spring整合Struts的庫(kù)文件!有啦這幾個(gè)東西,我就開始開工測(cè)試
我就先按我的猜想,先導(dǎo)入spring-struts.jar這文件,部署后,發(fā)現(xiàn)沒錯(cuò)誤,運(yùn)行也沒錯(cuò)!果然證實(shí)我的想法沒錯(cuò)
然后我還把下載來的Spring官網(wǎng)的最新的庫(kù)文件,發(fā)現(xiàn)找不到spring-struts.jar這個(gè)庫(kù)文件。然后我一個(gè)個(gè)測(cè)試后,原來這個(gè)庫(kù)文件是集成在spring-web.jar里面啦!
我把spring-struts.jar去掉后,導(dǎo)入Spring官方的最新的相關(guān)庫(kù)文件后(不能全部導(dǎo),全部導(dǎo)入也會(huì)有錯(cuò)誤,用到的才能導(dǎo)!),程序也沒發(fā)生任何錯(cuò)誤
以下的是我用到的庫(kù)文件,本人測(cè)試過沒問題
http://www.tkk7.com/Files/czmchen/ssh中Spring的庫(kù)文件.rar
http://www.tkk7.com/Files/czmchen/spring-struts.jar.zip