struts2启动报错com/opensymphony/xwork2/spring/SpringObjectFactory.java:220:-1

tomcat启动报错:

Class: com.opensymphony.xwork2.spring.SpringObjectFactory  

File: SpringObjectFactory.java  

Method: getClassInstance  

Line: 220 - com/opensymphony/xwork2/spring/SpringObjectFactory.java:220:-1  

    at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:428)  

    at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:69)  

    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:51)  

    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:295)  

    at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)  

    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115)  

    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3838)  

    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4488)  

    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)  

    at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)  

    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)  

    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)  

    at org.apache.catalina.core.StandardService.start(StandardService.java:519)  

    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)  

    at org.apache.catalina.startup.Catalina.start(Catalina.java:581)  

    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:585)  

    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)  

    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)  

Caused by: java.lang.NullPointerException  

    at com.opensymphony.xwork2.spring.SpringObjectFactory.getClassInstance(SpringObjectFactory.java:220)  

  解决方法

web.xml中没有配置加载spring ApplicationContext相关的listener

<listener>  

    <listener-class>  

        org.springframework.web.context.ContextLoaderListener  

    </listener-class>  

</listener>  

原理:

查看struts2插件struts2-spring-plugin中的strtus-plugin.xml

Xml代码    收藏代码
<struts>  

    <bean type="com.opensymphony.xwork2.ObjectFactory" name="spring" class="org.apache.struts2.spring.StrutsSpringObjectFactory" />  

      

    <!--  Make the Spring object factory the automatic default -->  

    <constant name="struts.objectFactory" value="spring" />  

  

  

    <constant name="struts.class.reloading.watchList" value="" />  

    <constant name="struts.class.reloading.acceptClasses" value="" />  

    <constant name="struts.class.reloading.reloadConfig" value="false" />  

  

    <package name="spring-default">  

        <interceptors>  

            <interceptor name="autowiring" class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/>  

            <interceptor name="sessionAutowiring" class="org.apache.struts2.spring.interceptor.SessionContextAutowiringInterceptor"/>  

        </interceptors>  

    </package>      

</struts>  

 

 

 注意下面部分,表明该插件引入工程后,会自动设置Struts的ObjectFactory为StrutsSpringObjectFactory,从而让Spring的IOC容器来托管Struts的Action。所以导致了启动的问题。

 

Xml代码    收藏代码
  1. <bean type="com.opensymphony.xwork2.ObjectFactory" name="spring" class="org.apache.struts2.spring.StrutsSpringObjectFactory" />  
    
    <!--  Make the Spring object factory the automatic default -->  
    
    <constant name="struts.objectFactory" value="spring" />   

     

    

记录一下错误,方便查看。

 

原文地址 http://javeye.iteye.com/blog/940122

你可能感兴趣的:(struts2)