Struts与Spring整合方法之一- -
最近用Struts,Spring做了一个程序,看了很多这方面的资料和代码。这篇是对Struts和Spring协同工作所需要做的工作的总结。
Struts和Spring协同工作有两种方法:
一种是在Struts的Action中直接调用Spring的Bean;另一种方式是将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>
通过plug-in我们实现了Spring Context的加载,我们还需要修改配置,将Struts Action交给Spring容器进行管理:
<?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配置中包含了loginForm的两种配置形式,第一种是面向改造后的形式,第二种(作为注释)是与之对应的传统Struts配置方式。
我们试图在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 Boot的流行,这种Struts1与Spring的整合方式逐渐被新的框架组合取代,如Spring MVC或Spring Boot的WebFlux。然而,对于学习和理解框架整合以及依赖注入的概念,这些基础...
用DelegatingRequestProcessor和DelegatingActionProxy两种方法实现struts和spring的整合,不同的地方就在struts-config.xml文件中,当前文件中DelegatingRequestProcessor是注释的。
**Struts2和Spring整合** 整合Struts2和Spring的主要目标是利用两者的优点,创建一个更强大的MVC应用。整合步骤通常包括: 1. **配置Spring**:创建Spring的ApplicationContext配置文件,定义Bean及其依赖。 2. **...
在提供的"**Myeclipse中Struts和Spring整合.doc**"文档中,应该包含了详细的步骤指导,包括创建Struts和Spring项目、配置相关XML文件、编写Action和Service等。这份文档对于初学者来说是一份宝贵的资源,它将帮助...
这种整合方式使得开发者能够利用 Struts1 的 MVC 功能和 Spring 的强大依赖注入能力,构建出松耦合、易于维护的 Java Web 应用。在实际开发中,还可以结合其他技术,如 Hibernate 或 MyBatis 作为 ORM 解决方案,...
通过以上步骤,一个基本的Struts、Spring和Hibernate整合的应用就搭建完成了。这个整合的关键在于Struts处理HTTP请求,Spring管理业务对象和依赖,而Hibernate则处理数据库操作。这样的架构可以实现松耦合,便于代码...
SSH整合,全称为Struts、Spring和Hibernate的集成,是一种常见的Java Web开发框架组合,用于构建高效、可维护的企业级应用程序。在这个例子中,我们看到的是一个基于SSH的用户注册功能的实现,使用的开发工具是...
struts1 spring ibatis整合项目源码struts1 spring ibatis整合项目源码struts1 spring ibatis整合项目源码struts1 spring ibatis整合项目源码struts1 spring ibatis整合项目源码struts1 spring ibatis整合项目源码
Struts技术资料 hibernate技术资料 spring技术资料 ssh整合技术(struts与hibernate整合,struts与spring整合,hibernate与spring整合,struts,hibernate,spring整合)
- **DelegatingActionProxy 方式**:这是最灵活的方式,通过Struts的DelegatingActionProxy,可以将Action的实例化交给Spring容器处理,实现Action的依赖注入,增强了灵活性和可扩展性。 2. **Spring 与 Hibernate...
整合Struts、Spring和Hibernate可以构建出高度模块化的应用,提高开发效率和代码质量。然而,随着Java EE技术的发展,现代Web应用更多地转向Spring Boot、Spring MVC和MyBatis等更现代的解决方案,它们在易用性、...
将Struts2和Spring整合可以充分利用各自的优势,实现更加灵活、高效的应用开发。 整合Struts2和Spring主要涉及以下几个关键步骤: 1. **添加依赖**:首先,需要在项目的构建配置文件(如Maven的pom.xml或Gradle的...
Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们各自解决应用程序的不同问题,而将这三者整合在一起可以构建高效、灵活的企业级应用。Struts2作为MVC(Model-View-Controller)框架,负责处理用户请求...
《Spring+Struts+Hibernate整合开发》是一本深入讲解企业级Java应用开发的书籍,它主要聚焦于三大著名开源框架——Spring、Struts和Hibernate的集成与应用。这些框架是Java Web开发中的基石,广泛应用于各种复杂的...
struts struts hibernate spring 整合 PUBhibernstruts hibernate spring 整合 PUBate spring 整合 PUB
在Struts2.1.6、Spring2.5.6和Hibernate3.3.1的版本中,整合这三个框架时,开发者通常会使用全注解的方式来简化配置。全注解开发意味着在类和方法上使用注解来声明和配置组件,而不是编写XML配置文件。 首先,开发...
在整合Spring时,我们通常会利用Spring的Action代理来替代Struts2默认的Action实例化方式,这样可以将Action的创建和依赖注入交给Spring容器来管理。具体实现包括在Struts配置文件中声明Spring插件,并在Spring的...
综上所述,"struts hibernate spring整合图解及源码"这个主题涵盖了如何将这三大框架结合使用,以构建高效、模块化的JavaWeb应用。通过学习和实践这个整合过程,初学者可以深入理解JavaEE开发的高级技术,并提升自己...
Struts+Spring+Hibernet整合例子 Struts+Spring+Hibernet整合例子 Struts+Spring+Hibernet整合例子 Struts+Spring+Hibernet整合例子 Struts+Spring+Hibernet整合例子
在"Struts+Spring整合例题附jar包"中,我们主要关注的是如何解决Struts 1.1和Spring之间的jar包冲突问题,以及如何将这两个框架整合起来。这通常涉及到以下关键知识点: 1. **依赖注入**:Spring的核心特性之一就是...