您的位置:首页 > 编程语言 > Java开发

spring集成struts2

2015-06-28 10:37 519 查看
转载地址:http://javeye.iteye.com/blog/940122 点击打开链接

在用spring集成struts时遇到的问题。

如果想用sprng 托管struts的action,需要引用struts2插件struts2-spring-plugin,该插件目录下会有一个配置文件strtus-plugin.xml,

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

omcat启动报错:

Xml代码


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)

原因:

配置了依赖:

Xml代码


<dependency>

<groupId>org.apache.struts</groupId>

<artifactId>struts2-spring-plugin</artifactId>

<version>2.2.1</version>

</dependency>

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

Xml代码


<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代码


<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" />

记录一下错误,方便查看。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: