struts2.与spring集成

来源:互联网 发布:smc软件 编辑:程序博客网 时间:2024/04/27 15:44

 

1.struts2-spring-plugin-2.0.8.jar文件包含到我们的应用中,放到WEB-INF/lib目录下面即可。在这个插件包中有个struts-plugin.xml文件,它的内容如下:

<struts>

    <bean type="com.opensymphony.xwork2.ObjectFactory" name="spring"

         class="org.apache.struts2.spring.StrutsSpringObjectFactory" />

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

    <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覆盖了,设置为”spring”,其实这里是使用了缩写,我们可以写全称:org.apache.struts2.spring.StrutsSpringObjectFactory。这个缩写的”spring”是和bean配置中的name属性相对应的。默认情况下所有由框架创建的对象都是由ObjectFactory实例化的ObjectFactory提供了与其它IoC容器如SpringPico等集成的方法。覆盖这个ObjectFactory的类必须继承ObjectFactory类或者它的任何子类,并且要带有一个不带参数的构造方法。在这里我们用org.apache.struts2.spring.StrutsSpringObjectFactory代替了默认的ObjectFactory

如果action不是使用Spring ObjectFactory创建的话,插件提供了两个拦截器来自动装配action,默认情况下框架使用的自动装配策略是name,也就是说框架会去Spring中寻找与action属性名字相同的bean,可选的装配策略还有:typeautoconstructor,我们可以通过常量struts.objectFactory.spring.autoWire来进行设置。

2.配置Spring监听器,将Spring.jar包包含到应用中

web.xml中加上:

<listener>

        <listener-class>

            org.springframework.web.context.ContextLoaderListener

        </listener-class>

    </listener>

    <context-param>

        <param-name>contextConfigLocation</param-name>

        <param-value>

            classpath:applicationContext.xml

        </param-value>

    </context-param>

3.利用Spring配置文件来注册对象

applicationContext-xml.进行配置bean,当配置Actionid时应该与struts.xmlclass我相应,进行关联起来。如下:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC

    "-//SPRING//DTD BEAN//EN"

    "http://www.springframework.org/dtd/spring-beans.dtd">

 

<beans>

    <!-- Example of SAF2 action instantiated by Spring -->

    <bean id="dao" class="tutorial.dao.BookDao" singleton="true" />

    <bean id="bookAction" class="tutorial.action.BookAction" singleton="false">

        <property name="dao">

            <ref local="dao" />

        </property>

    </bean>

</beans>

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC

    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

    <package name="Struts2_CRUD_DEMO" extends="struts-default"      namespace="/Book">

        <global-results>

            <result name="root">/exception.jsp</result>   <!-- /指向book包外的页面 -->

        </global-results>

        <global-exception-mappings>

            <exception-mapping exception="common.MyException" result="root" />

        </global-exception-mappings>

 

        <action name="List" class="bookAction"  method="list">

            <result>List.jsp</result>

        </action>

        <action name="Edit" class="bookAction"  method="load">

            <result>Edit.jsp</result>

        </action>

        <action name="Store" class="bookAction" method="store">

            <result type="redirect">List.action</result>

            <result name="input">Edit.jsp</result>

        </action>

        <action name="Remove" class="bookAction" method="remove">

            <result type="redirect">List.action</result>

        </action>

    </package>

</struts>

 

注意:strut.xml中配置的actionclass值,应该与spring中配置的Action Bean id 相应。

原创粉丝点击