struts与spring整合

struts2提供了整合插件。

  1. 当请求过来时,经过某个特定拦截器,拦截器就是那个插件。
  2. 插件读取action配置文件,然后利用保存在servlet中的ActionContext对象调用getBean方法获取即找到spring配置文件中对应的bean的对象(就是action对象)。(即实现在action中注入service组件)
  3. 然后返回给拦截器,拦截器调用action中的方法。

所以此时的action对象不再是struts2创建的,而是spring创建的。


整合步骤

配置web.xml:
修改struts配置文件:struts提供的插件配置进来;修改Action为注入service组件;以及action位置(交给spring容器做管理)
编写spring配置文件:datasource,jdbc…dao…servicer…action


配置web.xml,添加整合时spring需要的上下文参数,用于指定spring配置文件的位置。

    <context-param>
        <description>spring框架要求的web应用程序“上下文参数”,指定spring配置文件的位置</description>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/ApplicationContext.xml</param-value>
    </context-param>

配置web.xml,添加web应用程序上下文监听器声明;就是说web应用程序启动时会启动监听器,实现spring容器对象的创建(new ClassPathXmlApplicationContext("/config/beans.xml");),并把对象放到servletContext作用域中。
监听器负责创建spring容器对象。

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

添加struts整合spring插件jar包。struts2-spring-plugin-2.2.1.1.jar

修改struts配置文件,添加(这个类就在上面添加的jar包中)
负责利用spring容器对象获取bean对象。

<constant name="struts.objectFactory" 
              value="org.apache.struts2.spring.StrutsSpringObjectFactory"/>

修改Action组件,相关代码都使用注入的组件实现。
private AdminUserDAO adminUserDAO;

修改spring配置文件,bean.xml以及struts.xml,将Action的名字对应。以及注意bean.xml中新配置的bean属性为name不是id。
(例子中ref为dao,实际应为service)
bean.xml:在action组件中注入service

    <bean name="demoAction" class="com.justcrazy.www.action.DemoAction">
        <property name="adminUserDAO" ref="adminUserDAO"/>
    </bean>

struts.xml:原来的action是struts创建,现在是spring创建action对象。所以要改class值。

//之前
<action name="DemoAction" class="com.justcrazy.www.action.DemoAction">
            <result name="success">/register/EnterCustomerInfo.jsp</result>
            <result name="input">/demo/demo.jsp</result>

            <interceptor-ref name="leagueStack" />
            <interceptor-ref name="perfomance" />
            <!--<interceptor-ref name="authStack" />-->
        </action>
//之后
<action name="DemoAction" class="demoAction">
            <result name="success">/register/EnterCustomerInfo.jsp</result>
            <result name="input">/demo/demo.jsp</result>

            <interceptor-ref name="leagueStack" />
            <interceptor-ref name="perfomance" />
            <!--<interceptor-ref name="authStack" />-->
        </action>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    <context-param>
        <description>spring框架要求的web应用程序“上下文参数”,指定spring配置文件的位置</description>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/beans.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!--struts2 框架的过滤器-->
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
</web-app>

struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//ApacheSoftware Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>


    <constant name="struts.objectFactory" 
              value="org.apache.struts2.spring.StrutsSpringObjectFactory"/>

    <package name="demo" namespace="/demo" extends="struts-default">
        <interceptors>
            <interceptor-stack name="leagueStack">
                <interceptor-ref name="defaultStack"/>
                <interceptor-ref name="timer"/>
            </interceptor-stack>
            <interceptor name="perfomance" class="com.justcrazy.www.intercepter.PerformanceIntercepter" />

            <interceptor-stack name="authStack">
                <interceptor-ref name="defaultStack"/>
                <interceptor-ref name="authInterceptor"/>
            </interceptor-stack>
            <interceptor name="authInterceptor" class="com.justcrazy.www.intercepter.AuthInterceptor" />
        </interceptors>

        <!--<action name="DemoAction" class="com.justcrazy.www.action.DemoAction">-->
        <action name="DemoAction" class="demoAction">
            <result name="success">/register/EnterCustomerInfo.jsp</result>
            <result name="input">/demo/demo.jsp</result>

            <interceptor-ref name="leagueStack" />
            <interceptor-ref name="perfomance" />
            <!--<interceptor-ref name="authStack" />-->
        </action>
        <action name="RegisterCustomer" class="com.justcrazy.www.action.CustomerRegisterAction">
            <result name="success">/register/RegisterSucc.jsp</result>
            <result name="input">/register/EnterCustomerInfo.jsp</result>
        </action>

    </package>

    <package name="admin" namespace="/admin" extends="struts-default">
        <interceptors>
            <interceptor-stack name="authStack">
                <interceptor-ref name="defaultStack"/>
                <interceptor-ref name="authInterceptor"/>
            </interceptor-stack>
            <interceptor name="authInterceptor" class="com.justcrazy.www.intercepter.AuthInterceptor" />
        </interceptors>

        <action name="Login" class="com.justcrazy.www.action.LoginAction">
            <result name="timeout">/admin/Login.jsp</result>
            <result name="input">/admin/Login.jsp</result>
            <!--获取action中的属性值,不是el表达式。-->
            <result name="success">/demo/${page}.jsp</result>
        </action>
        <action name="Authentication" class="com.justcrazy.www.action.AuthenticationAction">
            <result name="demo">/demo/demo.jsp</result>
            <result name="login">/admin/Login.jsp</result>

            <interceptor-ref name="authStack" />
        </action>
    </package>
</struts>

bean.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
            http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context-2.5.xsd">

    <bean id="address" class="com.justcrazy.www.model.Address">
        <property name="city" value="北京" />
        <property name="street" value="五棵松路26号" />
    </bean>

    <bean id="company" class="com.justcrazy.www.model.Company" scope="prototype">
        <property name="name" value="就是各种浪" />
        <property name="age" value="1" />
        <property name="address" ref="address" />
        <property name="employees">
            <list>
                <value>帅哥</value>
                <value>美女</value>
                <value>女流氓</value>
            </list>
        </property>
        <property name="department">
            <set>
                <value>耍流氓</value>
                <value>服务</value>
            </set>
        </property>
    </bean>

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://node1:3306/temp" />
        <property name="username" value="hive" />
        <property name="password" value="hive" />
    </bean>

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource" />
    </bean>

    <bean id="adminUserDAO" class="dao.AdminUserDAO">
        <property name="jdbcTemplate" ref="jdbcTemplate" />
    </bean>

    <bean name="demoAction" class="com.justcrazy.www.action.DemoAction">
        <property name="adminUserDAO" ref="adminUserDAO"/>
    </bean>
</beans>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值