struts与spring如何整合(1)

一、struts与spring如何整合
线索从web.xml看起

Java代码 复制代码
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"  
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.          xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   
  5.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">   
  6.   
  7.     <display-name>app name</display-name>   
  8.   
  9.     <welcome-file-list>   
  10.         <welcome-file>/index.jsp</welcome-file>   
  11.     </welcome-file-list>   
  12.   
  13.     <listener>   
  14.         <listener-class>com.ramix.common.util.InitPlatformLoader</listener-class>   
  15.     </listener>   
  16.   
  17.     <context-param>   
  18.         <param-name>contextConfigLocation</param-name>   
  19.         <param-value>   
  20.             /WEB-INF/spring/*.spring.xml   
  21.         </param-value>   
  22.     </context-param>   
  23.   
  24.     <!-- Spring的过滤器 -->   
  25.     <filter>   
  26.         <filter-name>OpenSessionFilter</filter-name>   
  27.         <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>   
  28.         <init-param>   
  29.             <param-name>singleSession</param-name>   
  30.             <param-value>true</param-value>   
  31.         </init-param>   
  32.     </filter>   
  33.     <!-- 编码转换过滤器 -->   
  34.     <filter>   
  35.         <filter-name>encodingFilter</filter-name>   
  36.         <filter-class>com.ramix.common.webapp.filter.EncodingFilter</filter-class>   
  37.     </filter>   
  38.     <!--sitemesh过滤器-->   
  39.     <filter>   
  40.         <filter-name>sitemesh</filter-name>   
  41.         <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>   
  42.         <init-param>   
  43.             <param-name>configFile</param-name>   
  44.             <param-value>/WEB-INF/classes/sitemesh.xml</param-value>   
  45.         </init-param>   
  46.     </filter>   
  47.     <!--session-->   
  48.     <filter-mapping>   
  49.         <filter-name>OpenSessionFilter</filter-name>   
  50.         <url-pattern>*.do</url-pattern>   
  51.     </filter-mapping>   
  52.     <!--encode-->   
  53.     <filter-mapping>   
  54.         <filter-name>encodingFilter</filter-name>   
  55.         <url-pattern>*.do</url-pattern>   
  56.     </filter-mapping>   
  57.     <!--sitemesh过滤-->   
  58.     <filter-mapping>   
  59.         <filter-name>sitemesh</filter-name>   
  60.         <url-pattern>*.do</url-pattern>   
  61.     </filter-mapping>   
  62.   
  63.     <!-- struts 的配置 -->   
  64.     <servlet>   
  65.         <servlet-name>action</servlet-name>   
  66.         <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>   
  67.         <init-param>   
  68.             <param-name>config</param-name>   
  69.             <param-value>   
  70.                 /WEB-INF/struts/struts-config.xml,   
  71.                 /WEB-INF/struts/action/fileupload-action-config.xml,   
  72.                 /WEB-INF/struts/action/demo-action-config.xml   
  73.             </param-value>   
  74.         </init-param>   
  75.         <load-on-startup>1</load-on-startup>   
  76.     </servlet>   
  77.     <servlet-mapping>   
  78.         <servlet-name>action</servlet-name>   
  79.         <url-pattern>*.do</url-pattern>   
  80.     </servlet-mapping>   
  81.     <!--showpic-->   
  82.     <servlet>   
  83.         <servlet-name>showphoto</servlet-name>   
  84.         <servlet-class>com.ramix.demo.webapp.servlet.ShowParentPicServlet</servlet-class>   
  85.         <init-param>   
  86.             <param-name>noimage</param-name>   
  87.             <param-value>/images/noimage.gif</param-value>   
  88.         </init-param>   
  89.     </servlet>   
  90.     <servlet-mapping>   
  91.         <servlet-name>showphoto</servlet-name>   
  92.         <url-pattern>/showphoto</url-pattern>   
  93.     </servlet-mapping>   
  94.     <!--cxf-->   
  95.     <servlet>   
  96.         <servlet-name>cxf</servlet-name>   
  97.         <servlet-class>   
  98.             org.apache.cxf.transport.servlet.CXFServlet   
  99.         </servlet-class>   
  100.         <load-on-startup>2</load-on-startup>   
  101.     </servlet>   
  102.     <servlet-mapping>   
  103.         <servlet-name>cxf</servlet-name>   
  104.         <url-pattern>/ws/*</url-pattern>   
  105.     </servlet-mapping>   
  106.   
  107.     <error-page>   
  108.         <error-code>404</error-code>   
  109.         <location>/WEB-INF/page/common/e404.jsp</location>   
  110.     </error-page>   
  111.     <error-page>   
  112.         <error-code>500</error-code>   
  113.         <location>/WEB-INF/page/common/e500.jsp</location>   
  114.     </error-page>   
  115. </web-app>  
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <display-name>app name</display-name>

    <welcome-file-list>
        <welcome-file>/index.jsp</welcome-file>
    </welcome-file-list>

    <listener>
        <listener-class>com.ramix.common.util.InitPlatformLoader</listener-class>
    </listener>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/spring/*.spring.xml
        </param-value>
    </context-param>

    <!-- Spring的过滤器 -->
    <filter>
        <filter-name>OpenSessionFilter</filter-name>
        <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
        <init-param>
            <param-name>singleSession</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <!-- 编码转换过滤器 -->
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>com.ramix.common.webapp.filter.EncodingFilter</filter-class>
    </filter>
    <!--sitemesh过滤器-->
    <filter>
        <filter-name>sitemesh</filter-name>
        <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
        <init-param>
            <param-name>configFile</param-name>
            <param-value>/WEB-INF/classes/sitemesh.xml</param-value>
        </init-param>
    </filter>
    <!--session-->
    <filter-mapping>
        <filter-name>OpenSessionFilter</filter-name>
        <url-pattern>*.do</url-pattern>
    </filter-mapping>
    <!--encode-->
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>*.do</url-pattern>
    </filter-mapping>
    <!--sitemesh过滤-->
    <filter-mapping>
        <filter-name>sitemesh</filter-name>
        <url-pattern>*.do</url-pattern>
    </filter-mapping>

    <!-- struts 的配置 -->
    <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
        <init-param>
            <param-name>config</param-name>
            <param-value>
                /WEB-INF/struts/struts-config.xml,
                /WEB-INF/struts/action/fileupload-action-config.xml,
                /WEB-INF/struts/action/demo-action-config.xml
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    <!--showpic-->
    <servlet>
        <servlet-name>showphoto</servlet-name>
        <servlet-class>com.ramix.demo.webapp.servlet.ShowParentPicServlet</servlet-class>
        <init-param>
            <param-name>noimage</param-name>
            <param-value>/images/noimage.gif</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>showphoto</servlet-name>
        <url-pattern>/showphoto</url-pattern>
    </servlet-mapping>
    <!--cxf-->
    <servlet>
        <servlet-name>cxf</servlet-name>
        <servlet-class>
            org.apache.cxf.transport.servlet.CXFServlet
        </servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>cxf</servlet-name>
        <url-pattern>/ws/*</url-pattern>
    </servlet-mapping>

    <error-page>
        <error-code>404</error-code>
        <location>/WEB-INF/page/common/e404.jsp</location>
    </error-page>
    <error-page>
        <error-code>500</error-code>
        <location>/WEB-INF/page/common/e500.jsp</location>
    </error-page>
</web-app>


这里我们要关注的是两个地方的配置文件
1、/WEB-INF/spring/*.spring.xml
2、/WEB-INF/struts/struts-config.xml,/WEB-INF/struts/action/fileupload-action-config.xml,/WEB-INF/struts/action/demo-action-config.xml

{1}中放置的配置文件是关于service层的配置
如:demo.spring.xml

Java代码 复制代码
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"  
  3.     "http://www.springframework.org/dtd/spring-beans-2.0.dtd">   
  4.   
  5. <beans>   
  6.     <bean id="parentManager" parent="baseTxService">   
  7.         <property name="target">   
  8.             <bean class="com.ramix.demo.service.impl.ParentManagerImpl" autowire="byName">   
  9.                 <property name="childMgr" ref="childManager"/>   
  10.             </bean>   
  11.         </property>   
  12.     </bean>   
  13.   
  14.     <bean id="childManager" parent="baseTxService">   
  15.         <property name="target">   
  16.             <bean class="com.ramix.demo.service.impl.ChildManagerImpl" autowire="byName"/>   
  17.         </property>   
  18.     </bean>   
  19.   
  20.     <bean id="jdbcManager" parent="baseTxService">   
  21.         <property name="target">   
  22.             <bean class="com.ramix.demo.service.impl.JdbcManagerImpl" autowire="byName" parent="jdbcDao"/>   
  23.         </property>   
  24.     </bean>   
  25.   
  26. </beans>  
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
	"http://www.springframework.org/dtd/spring-beans-2.0.dtd">

<beans>
	<bean id="parentManager" parent="baseTxService">
		<property name="target">
			<bean class="com.ramix.demo.service.impl.ParentManagerImpl" autowire="byName">
				<property name="childMgr" ref="childManager"/>
			</bean>
		</property>
	</bean>

	<bean id="childManager" parent="baseTxService">
		<property name="target">
			<bean class="com.ramix.demo.service.impl.ChildManagerImpl" autowire="byName"/>
		</property>
	</bean>

	<bean id="jdbcManager" parent="baseTxService">
		<property name="target">
			<bean class="com.ramix.demo.service.impl.JdbcManagerImpl" autowire="byName" parent="jdbcDao"/>
		</property>
	</bean>

</beans>


{2}中放置的都是struts的配置文件
如:/WEB-INF/sturts/action/demo-action-config.xml

Java代码 复制代码
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <!DOCTYPE struts-config PUBLIC   
  3.     "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"  
  4.     "http://struts.apache.org/dtds/struts-config_1_2.dtd">   
  5. <struts-config>   
  6.     <action-mappings>   
  7.         <action path="/demo/list"  
  8.                 type="com.ramix.demo.webapp.action.DemoListAction"  
  9.                 parameter="method"  
  10.                 scope="request"  
  11.                 name="globalForm">   
  12.             <forward name="view" path="/WEB-INF/page/demo/list.jsp"/>   
  13.         </action>   
  14.         <action path="/demo/create" forward="/WEB-INF/page/demo/create.jsp"/>   
  15.         <action path="/demo/save"  
  16.                 type="com.ramix.demo.webapp.action.DemoSaveAction"  
  17.                 parameter="method"  
  18.                 scope="request"  
  19.                 name="globalForm">   
  20.             <forward name="view" path="/demo/list.do"/>   
  21.         </action>   
  22.         <action path="/demo/client"  
  23.                 type="com.ramix.demo.webapp.action.DemoClientAction"  
  24.                 parameter="method"  
  25.                 scope="request"  
  26.                 name="globalForm">   
  27.             <forward name="view" path="/WEB-INF/page/demo/client.jsp"/>   
  28.         </action>   
  29.         <action path="/demo/mail" forward="/WEB-INF/page/demo/sendmail.jsp"/>   
  30.         <action path="/demo/send"  
  31.                 type="com.ramix.demo.webapp.action.DemoSendAction"  
  32.                 parameter="method"  
  33.                 scope="request"  
  34.                 name="globalForm"/>   
  35.   
  36.         <action path="/demo/child/create"  
  37.                 type="com.ramix.demo.webapp.action.DemoChildCreateAction"  
  38.                 parameter="method"  
  39.                 scope="request"  
  40.                 name="globalForm">   
  41.             <forward name="view" path="/WEB-INF/page/demo/child_create.jsp"/>   
  42.         </action>   
  43.         <action path="/demo/child/save"  
  44.                 type="com.ramix.demo.webapp.action.DemoChildSaveAction"  
  45.                 parameter="method"  
  46.                 scope="request"  
  47.                 name="globalForm"/>   
  48.         <action path="/demo/child/list"  
  49.                 type="com.ramix.demo.webapp.action.DemoChildListAction"  
  50.                 parameter="method"  
  51.                 scope="request"  
  52.                 name="globalForm">   
  53.             <forward name="view" path="/WEB-INF/page/demo/child_list.jsp"/>   
  54.         </action>   
  55.         <action path="/demo/cahce_list" forward="/WEB-INF/page/demo/cache.jsp"/>   
  56.         <action path="/demo/child/list/ajax" forward="/WEB-INF/page/demo/child_list_ajax.jsp"/>   
  57.         <action path="/demo/ajax/child/list"  
  58.                 type="com.ramix.demo.webapp.action.DemoAjaxChildListAction"  
  59.                 parameter="method"  
  60.                 scope="request"  
  61.                 name="globalForm">   
  62.             <forward name="view" path="/WEB-INF/page/demo/ajax_list.jsp"/>   
  63.         </action>   
  64.         <action path="/demo/test"  
  65.                 type="com.ramix.demo.webapp.action.DemoListAction"  
  66.                 parameter="method"  
  67.                 scope="request"  
  68.                 name="globalForm">   
  69.             <forward name="test" path="/WEB-INF/page/demo/test.jsp"/>   
  70.         </action>   
  71.            
  72.     </action-mappings>   
  73. </struts-config>  
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
	"http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
	<action-mappings>
		<action path="/demo/list"
				type="com.ramix.demo.webapp.action.DemoListAction"
				parameter="method"
				scope="request"
				name="globalForm">
			<forward name="view" path="/WEB-INF/page/demo/list.jsp"/>
		</action>
		<action path="/demo/create" forward="/WEB-INF/page/demo/create.jsp"/>
		<action path="/demo/save"
				type="com.ramix.demo.webapp.action.DemoSaveAction"
				parameter="method"
				scope="request"
				name="globalForm">
			<forward name="view" path="/demo/list.do"/>
		</action>
		<action path="/demo/client"
				type="com.ramix.demo.webapp.action.DemoClientAction"
				parameter="method"
				scope="request"
				name="globalForm">
			<forward name="view" path="/WEB-INF/page/demo/client.jsp"/>
		</action>
		<action path="/demo/mail" forward="/WEB-INF/page/demo/sendmail.jsp"/>
		<action path="/demo/send"
				type="com.ramix.demo.webapp.action.DemoSendAction"
				parameter="method"
				scope="request"
				name="globalForm"/>

		<action path="/demo/child/create"
				type="com.ramix.demo.webapp.action.DemoChildCreateAction"
				parameter="method"
				scope="request"
				name="globalForm">
			<forward name="view" path="/WEB-INF/page/demo/child_create.jsp"/>
		</action>
		<action path="/demo/child/save"
				type="com.ramix.demo.webapp.action.DemoChildSaveAction"
				parameter="method"
				scope="request"
				name="globalForm"/>
		<action path="/demo/child/list"
				type="com.ramix.demo.webapp.action.DemoChildListAction"
				parameter="method"
				scope="request"
				name="globalForm">
			<forward name="view" path="/WEB-INF/page/demo/child_list.jsp"/>
		</action>
		<action path="/demo/cahce_list" forward="/WEB-INF/page/demo/cache.jsp"/>
		<action path="/demo/child/list/ajax" forward="/WEB-INF/page/demo/child_list_ajax.jsp"/>
		<action path="/demo/ajax/child/list"
				type="com.ramix.demo.webapp.action.DemoAjaxChildListAction"
				parameter="method"
				scope="request"
				name="globalForm">
			<forward name="view" path="/WEB-INF/page/demo/ajax_list.jsp"/>
		</action>
		<action path="/demo/test"
				type="com.ramix.demo.webapp.action.DemoListAction"
				parameter="method"
				scope="request"
				name="globalForm">
			<forward name="test" path="/WEB-INF/page/demo/test.jsp"/>
		</action>
		
	</action-mappings>
</struts-config>


而衔接struts与spring的地方是在struts-config.xml中体现
/WEB-INF/struts/struts-config.xml:

Java代码 复制代码
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <!DOCTYPE struts-config PUBLIC   
  3.     "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"  
  4.     "http://struts.apache.org/dtds/struts-config_1_2.dtd">   
  5. <struts-config>   
  6.     <form-beans>   
  7.         <form-bean name="globalForm" type="org.apache.struts.action.DynaActionForm"/>   
  8.     </form-beans>   
  9.   
  10.     <global-forwards>   
  11.         <forward name="globalError" path="/WEB-INF/page/common/error.jsp"/>   
  12.         <forward name="globalSuccess" path="/WEB-INF/page/common/success.jsp"/>   
  13.     </global-forwards>   
  14.   
  15.     <!--    
  16.         利用了 <controller> 标记来用 DelegatingRequestProcessor 覆盖默认的 Struts RequestProcessor。   
  17.         下一步是在 Spring 配置文件中注册该动作   
  18.            
  19.         DelegatingRequestProcessor自动地配置属性。这种设计使 Struts 动作并不知道它正被 Spring 管理,并且使您能够利用 Sping 的动作管理框架的所有优点。   
  20.        
  21.         在请求转发给action之前,转发给Spring的Bean   
  22.      -->   
  23.     <controller>   
  24.         <set-property property="processorClass"  
  25.                       value="org.springframework.web.struts.DelegatingRequestProcessor"/>   
  26.     </controller>   
  27.   
  28.     <!--    
  29.     装载环境:需要使用 Spring 的 ContextLoaderPlugin 为 Struts 的 ActionServlet 装载 Spring 应用程序环境   
  30.      -->   
  31.     <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">   
  32.         <set-property property="contextConfigLocation"  
  33.                       value="/WEB-INF/struts/spring/demo-action.spring.xml"/>   
  34.     </plug-in>   
  35. </struts-config>  
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
    "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
    <form-beans>
        <form-bean name="globalForm" type="org.apache.struts.action.DynaActionForm"/>
    </form-beans>

    <global-forwards>
        <forward name="globalError" path="/WEB-INF/page/common/error.jsp"/>
        <forward name="globalSuccess" path="/WEB-INF/page/common/success.jsp"/>
    </global-forwards>

	<!-- 
		利用了 <controller> 标记来用 DelegatingRequestProcessor 覆盖默认的 Struts RequestProcessor。
		下一步是在 Spring 配置文件中注册该动作
		
		DelegatingRequestProcessor自动地配置属性。这种设计使 Struts 动作并不知道它正被 Spring 管理,并且使您能够利用 Sping 的动作管理框架的所有优点。
	
		在请求转发给action之前,转发给Spring的Bean
	 -->
    <controller>
        <set-property property="processorClass"
                      value="org.springframework.web.struts.DelegatingRequestProcessor"/>
    </controller>

	<!-- 
	装载环境:需要使用 Spring 的 ContextLoaderPlugin 为 Struts 的 ActionServlet 装载 Spring 应用程序环境
	 -->
    <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
        <set-property property="contextConfigLocation"
                      value="/WEB-INF/struts/spring/demo-action.spring.xml"/>
    </plug-in>
</struts-config>


要知道Struts转发的一个重要类是RequestProcessor,而现在通过对controller的设置将转发类被org.springframework.web.struts.DelegatingRequestProcessor替换,
而org.springframework.web.struts.DelegatingRequestProcessor只是封装了RequestProcessor,这样struts的转发就由spring来处理了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值