struts与spring整合

来源:互联网 发布:淘宝BB8机器人 编辑:程序博客网 时间:2024/06/05 08:29

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>
0 0
原创粉丝点击