struts與spring 的整合
Struts與Spring整合方法之一- -
最近用Struts,Spring做了一個程式,看了很多這方面的資料和程式碼。這篇是對Struts和Spring協同工作所需要做的工作的總結。
Struts和Spring協同工作有兩種方法:
1. 一種是在Struts的Action中直接呼叫Spring的Bean;(就是原來一個路徑對一個action的方法)
2. 另一種方式是將Struts的Action作為Spring Beans,由Spring進行管理。
要使Struts與Spring協同工作需要修改Struts的配置檔案struts-config.xml和Spring的配置檔案applicationContext.xml
修改struts-config.xml
- <struts-config>
- <plug-in
- className="org.springframework.web.struts.ContextLoaderPlugIn">
- <set-property property="contextConfigLocation"
- value="/WEB-INF/applicationContext.xml" />
- </plug-in>
- </struts-config>
通過
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts
- Configuration 1.2//EN"
- "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
- <struts-config>
- <!-- ================ Form Bean Definitions ================-->
- <form-beans>
- <form-bean name="userForm"
- type="org.apache.struts.validator.DynaValidatorForm">
- <form-property name="user" type="org.appfuse.model.User"/>
- </form-bean>
- </form-beans>
- <!-- ================ Action Mapping Definitions ================-->
- <action-mappings>
- <action path="/user"
- type="org.springframework.web.struts.DelegatingActionProxy"
- name="userForm" scope="request" parameter="method" validate="false">
- <forward name="list" path="/userList.jsp"/>
- <forward name="edit" path="/userForm.jsp"/>
- </action>
- </action-mappings>
- <!-- <action-mappings>
- <action path="/user"
- type="com.ctbr.springtest.web.action.UserAction"
- name="userForm" scope="request" parameter="method" validate="false">
- <forward name="list" path="/userList.jsp"/>
- <forward name="edit" path="/userForm.jsp"/>
- </action>
- </action-mappings>-->
- <!-- ================= Plug Ins Configuration ================-->
- <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
- <set-property property="contextConfigLocation"
- value="/WEB-INF/applicationContext.xml,
- /WEB-INF/action-servlet.xml"/>
- </plug-in>
- </struts-config>
在Action配置上也需要做修改,
我們試圖在action-mapping 中增加一個名為userForm的Action,傳統方式中,直接將類名作為action節點的type屬性,Struts將根據type中的類名載入對應的Action例項。
而在面向SS組合的配置方式中,我們用Spring提供的DelegatingActionProxy 作為Action的type屬性。DelegatingActionProxy同樣是org.apache.struts.action.Action的一個子類,它將把呼叫請求轉交給真正的Action實現。下面是DelegatingActionProxy的execute方法程式碼:
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
//獲得實際的Action例項,並將請求轉交
Action delegateAction = getDelegateAction(mapping);
return delegateAction.execute(mapping, form, request, response);
}
如此一來,Struts 在執行期載入的實際上是DelegatingActionProxy , 而DelegatingActionProxy則實現了針對實際Action的呼叫代理,Struts最終呼叫的將是由Spring管理的Action例項。
通過這樣的方式,Spring 獲得了對Action 例項的管理權,它將對Action進行排程,併為Struts提供所需的Action例項。既然Action已經由Spring全權接管,那麼我們就可以將此Action看作是Spring中的一個Bean,它可享受Spring提供的所有服務(依賴注入、例項管理、事務管理等)。
與之對應,Spring Context配置如下:
applicationContext.xml:
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
- "http://www.springframework.org/dtd/spring-beans.dtd">
- <!-- 資料來源配置 -->
- <beans>
- <bean id="dataSource"
- class="org.springframework.jdbc.datasource.DriverManagerDataSource">
- <property name="driverClassName">
- <value>com.mysql.jdbc.Driver</value>
- </property>
- <property name="url">
- <value>jdbc:mysql://localhost:3306/bbs</value>
- </property>
- <property name="username">
- <value>bao</value>
- </property>
- <property name="password">
- <value>double</value>
- </property>
- </bean>
- <!-- DAO配置 -->
- <bean id="userDao" class="com.ctbr.springtest.dao.jdbc.UserDaoJdbc">
- <property name="dataSource">
- <ref bean="dataSource"/>
- </property>
- </bean>
- <bean id="postDao" class="com.ctbr.springtest.dao.jdbc.PostDaoJdbc">
- <property name="dataSource">
- <ref bean="dataSource"/>
- </property>
- </bean>
- <!-- <bean id="replyDAO" class="com.ctbr.springtest.dao.jdbc.ReplyDaoJdbc">
- <property name="postDao">
- <ref bean="postDAO" />
- </property>
- </bean>
- -->
- <!-- Service配置 -->
- <bean id="userService"
- class="com.ctbr.springtest.service.impl.UserServiceImpl"
- autowire="byType" />
- <bean id="postService"
- class="com.ctbr.springtest.service.impl.PostServiceImpl">
- <!-- <property name="replyDao">
- <ref bean="replyDao" />
- </property>-->
- </bean>
- <!-- Action配置 -->
- <bean name="/user" class="com.ctbr.springtest.web.action.UserAction"
- singleton="false">
- <property name="userService">
- <ref bean="userService"/>
- </property>
- </bean>
- </beans>
相關文章
- Struts2【與Spring整合】Spring
- spring:spring與mybatis的整合SpringMyBatis
- [java web]Idea+maven+spring4+hibernate5+struts2整合過程JavaWebIdeaMavenSpring
- Spring與ActiveMQ整合SpringMQ
- spring與redis整合SpringRedis
- Mybatis與Spring整合MyBatisSpring
- Spring Cache + Caffeine的整合與使用Spring
- ElasticSearch與Spring Boot整合ElasticsearchSpring Boot
- Spring 對Apache Kafka的支援與整合SpringApacheKafka
- Spring AI與大模型Ollama如何整合整合?SpringAI大模型
- Solr與Spring Boot整合 - ViithiisysSolrSpring Boot
- Spring Cache與Ehcache 3整合Spring
- Spring與Web環境整合SpringWeb
- SSH三大框架的搭建整合(Spring+Hibernate+Struts2)實現增刪改查登入框架Spring
- 【學習筆記】Spring與Junit的整合筆記Spring
- Shiro(環境搭建與Spring整合)Spring
- Spring同時整合JPA與MybatisSpringMyBatis
- mybatis與spring整合ssm01MyBatisSpringSSM
- ShardingSphere如何完成與Spring家族無縫整合的?Spring
- Spring Boot 3中將JWT與Spring Security 6整合Spring BootJWT
- Spring的Junit整合Spring
- Spring Security (三):與Vue.js整合SpringVue.js
- Spring Boot(十三)RabbitMQ安裝與整合Spring BootMQ
- Spring Boot 與 R2DBC 整合Spring Boot
- spring+redis的整合,使用spring-data-redis來整合SpringRedis
- spring系列—CAS客戶端與SpringSecurity整合Spring客戶端Gse
- Mybatis與Spring整合時都做了什麼?MyBatisSpring
- RabbitMQ(三):RabbitMQ與Spring Boot簡單整合MQSpring Boot
- CXF開發及與Spring整合開發Spring
- Spring 對Mabatis的整合SpringBAT
- Dozer的使用: 整合SpringSpring
- Struts框架_9 Struts2的驗證框架
- 原創:struts2+json+android整合開發解析前奏JSONAndroid
- Spring Boot整合Spring SecuritySpring Boot
- Spring Boot整合Spring BatchSpring BootBAT
- Spring Boot整合Spring AopSpring Boot
- ssh框架搭建Struts2 06+spring2 5+hibernate3 2整合例項程式碼教程步驟框架Spring
- 史上最全面的Spring Boot Cache使用與整合Spring Boot
- 聊聊自定義實現的SPI如何與spring進行整合Spring