现在的位置: 首页 > 综合 > 正文

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

2018年05月28日 ⁄ 综合 ⁄ 共 3992字 ⁄ 字号 评论关闭

好久没有搞struts2,今天配置strut2.2.1,启动时遇到个小问题。记录下。

tomcat启动报错:

Xml代码  收藏代码
  1. Class: com.opensymphony.xwork2.spring.SpringObjectFactory  
  2. File: SpringObjectFactory.java  
  3. Method: getClassInstance  
  4. Line: 220 - com/opensymphony/xwork2/spring/SpringObjectFactory.java:220:-1  
  5.     at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:428)  
  6.     at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:69)  
  7.     at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:51)  
  8.     at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:295)  
  9.     at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)  
  10.     at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115)  
  11.     at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3838)  
  12.     at org.apache.catalina.core.StandardContext.start(StandardContext.java:4488)  
  13.     at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)  
  14.     at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)  
  15.     at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)  
  16.     at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)  
  17.     at org.apache.catalina.core.StandardService.start(StandardService.java:519)  
  18.     at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)  
  19.     at org.apache.catalina.startup.Catalina.start(Catalina.java:581)  
  20.     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
  21.     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)  
  22.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)  
  23.     at java.lang.reflect.Method.invoke(Method.java:585)  
  24.     at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)  
  25.     at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)  
  26. Caused by: java.lang.NullPointerException  
  27.     at com.opensymphony.xwork2.spring.SpringObjectFactory.getClassInstance(SpringObjectFactory.java:220)  

 

原因:

配置了依赖:

Xml代码  收藏代码
  1. <dependency>  
  2.     <groupId>org.apache.struts</groupId>  
  3.     <artifactId>struts2-spring-plugin</artifactId>  
  4.     <version>2.2.1</version>  
  5. </dependency>  

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

Xml代码  收藏代码
  1. <listener>  
  2.     <listener-class>  
  3.         org.springframework.web.context.ContextLoaderListener  
  4.     </listener-class>  
  5. </listener>  

原理:

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

Xml代码  收藏代码
  1. <struts>  
  2.     <bean type="com.opensymphony.xwork2.ObjectFactory" name="spring" class="org.apache.struts2.spring.StrutsSpringObjectFactory" />  
  3.       
  4.     <!--  Make the Spring object factory the automatic default -->  
  5.     <constant name="struts.objectFactory" value="spring" />  
  6.   
  7.   
  8.     <constant name="struts.class.reloading.watchList" value="" />  
  9.     <constant name="struts.class.reloading.acceptClasses" value="" />  
  10.     <constant name="struts.class.reloading.reloadConfig" value="false" />  
  11.   
  12.     <package name="spring-default">  
  13.         <interceptors>  
  14.             <interceptor name="autowiring" class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/>  
  15.             <interceptor name="sessionAutowiring" class="org.apache.struts2.spring.interceptor.SessionContextAutowiringInterceptor"/>  
  16.         </interceptors>  
  17.     </package>      
  18. </struts>  

 

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

 

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

    

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

原因及解决办法:

不要引入包:struts2-spring-plugin-2.2.3.jar.

就是这么简单。

当存在这个jar包时,不管你用不用spring,它都会去需找Spring相关的内容,启动Spring容器,当没有Spring的相关内容时,那样就会报这个错了。

所以:宁可以少加包,千万别多家包!!

抱歉!评论已关闭.