`
haofeng82
  • 浏览: 144497 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

struts和spring整合

阅读更多

(如需引用请注明出处:
http://blog.csdn.net/haofeng82/archive/2007/04/24/1579373.aspx

)

Struts与hibernate 整合
一 何谓两者的整合?
简单的来说就是让spring来管理struts Action的创建(包括关联对象),能充分利用spring的依赖注入优势,而无须显式的获取applicationContext实例。
二 主要的方式
1 使用DelegatingRequestProcessor
需要为struts增加ContextLoaderPlugin
由于ActionServlet是调用requestProcessor完成实际的转发,如果想将Action截获的请求转发给applicationContext 的bean。可以通过requestProcessor完成
这是通过用delegatingRequestProcessor替换requestProcessor实现的。
这样所有的请求就会转发到spring中配置的Action,而不是根据struts的action元素中配置的type属性进行action选择。从而实现了由spring管理action
缺点:占用了controllor,无法进行其它需要扩展requestProcessor的情况。
2 使用delegatingActionProxy(推荐使用,因为上一种方式占用了requestProcessor)
将所有的请求都发到DelegatingActionProxy类(通过配置所有struts的action为DelegatingActionProxy,再由DelegatingActionProxy根据path属性去匹配spring中配置的相关Action).利用IOC生成Action并运行。
下面看一下具体的配置:
先看一下struts-config.xml:
<struts-config>
<form-beans>
<form-bean name="HelloForm" type="com.hf.struts.sayHello.HelloForm"/>
</form-beans>
<action-mappings>
<!-- HELLOWORLD 配置,使用了spring 来管理strutsAction -->
<action path = "/helloWorld"
type = "org.springframework.web.struts.DelegatingActionProxy"
name = "HelloForm"
scope = "request"
validate= "true"
input = "/sayHelloTest/sayHello.jsp"
>
<forward name="displayHello" path="/sayHelloTest/displayHello.jsp" />
</action>
</action-mappings>
<!-- 资源文件 -->
<message-resources parameter="com.hf.struts.application" />
<!-- spring管理struts的控件 -->
<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>
我们可以看到增加了一个plug-in,这主要是用来保证随应用启动时创建applicationContext实例。
除此之外和平常struts配置文件最大的不同就在于action标签的type属性,此属性均为org.springframework.web.struts.DelegatingActionProxy,即所有的action都指向这样一个类型的实体对象,由他进行action的生成,控制,处理。至于如何知道生成何种Action,这是由path属性决定的,请见下文。
我们再来看一下spring 的配置文件,这里有两个,一个用来存放关于struts的信息,另一个存spring其他信息,这两个文件分别在struts的plug-in中指定(见上面)。
Action-servlet.xml: 存放struts信息。
<?xml version="1.0" encoding="GB2312"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean name="/helloWorld" class="com.hf.struts.sayHello.HelloAction" singleton="false"><!--每个request请求产生新实例-->
<property name="pb">
<ref bean="personBean"/>
</property>
</bean>
</beans>
这里定义了一个Action,这里的class本来是应该在struts-config的action标签的type中定义的。也就是说,访问真正的action配置是在这里的。那么这是怎么关联起来的呢,看一下两个文件,会发现<bean>的name和action的path是一致的,明白了吧??
这样做使我们可以充分利用spring的ioc特性,可以对action对象进行组织,在这里,我们为action指定了一个pb成员变量。他们创建及相互的关联均由spring控制生成,无须编写任何代码。
在看一下另一个文件: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.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://127.0.0.1:3306/hibernatetest?characterEncoding=UTF8</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>12456</value>
</property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/hf/hibernate/hbm/User.hbm.xml</value>
</list>
</property>
</bean>
<bean id="personBean" class="com.hf.bean.sayHello.PersonBean">
<property name="userDAO">
<ref bean="userDAO"/>
</property>
</bean>
<bean id="userDAO" class="com.hf.dao.sayHello.UserDAO" singleton="true">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
</beans>
对struts有用的部分就是
<bean id="personBean" class="com.hf.bean.sayHello.PersonBean">
<property name="userDAO">
<ref bean="userDAO"/>
</property>
</bean>
他被关联到上面的action对象。
这样在我们的com.hf.struts.sayHello.HelloAction中,就会自动拥有一个PersonBean对象,无须手工创建。(这里的PersonBean是业务逻辑处理部分)
看一下代码:
publicfinalclass HelloAction extends Action {
PersonBean pb = null;
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
String userName = (String)((HelloForm) form).getUserName();
pb.setUserName(userName);
int times=pb.saveToPersistentStore();
request.setAttribute( "personbean", pb);
request.setAttribute("times",String.valueOf(times));
//request.setAttribute("times",String.valueOf(1));
request.removeAttribute(mapping.getAttribute());
return (mapping.findForward("displayHello"));
}
public PersonBean getPb() {
returnpb;
}
publicvoid setPb(PersonBean pb) {
this.pb = pb;
}
}
说到这,struts和spring的整合的基本方法已经介绍完了。感觉还是有一定的用处,但感觉用处不是很大,起码没有hibernate和spring整合带来的好处多。
如需要这一部分的完整代码,请留言回复
分享到:
评论

相关推荐

    struts和spring整合(两种实现方法)

    用DelegatingRequestProcessor和DelegatingActionProxy两种方法实现struts和spring的整合,不同的地方就在struts-config.xml文件中,当前文件中DelegatingRequestProcessor是注释的。

    Struts和Spring整合示例讲解

    在提供的"**Myeclipse中Struts和Spring整合.doc**"文档中,应该包含了详细的步骤指导,包括创建Struts和Spring项目、配置相关XML文件、编写Action和Service等。这份文档对于初学者来说是一份宝贵的资源,它将帮助...

    struts和spring整合的2种方式

    在Java Web开发中,Struts和Spring框架的整合是常见的需求,以实现更灵活和强大的业务逻辑处理。本文将详细介绍两种整合Struts1与Spring的方法。 首先,我们需要理解这两个框架的基本概念。Struts是一个基于MVC...

    struts+spring+hibernate整合

    通过以上步骤,一个基本的Struts、Spring和Hibernate整合的应用就搭建完成了。这个整合的关键在于Struts处理HTTP请求,Spring管理业务对象和依赖,而Hibernate则处理数据库操作。这样的架构可以实现松耦合,便于代码...

    SSH整合源码(Struts+Spring+Hibernate整合用户注册例子)

    SSH整合,全称为Struts、Spring和Hibernate的集成,是一种常见的Java Web开发框架组合,用于构建高效、可维护的企业级应用程序。在这个例子中,我们看到的是一个基于SSH的用户注册功能的实现,使用的开发工具是...

    Struts和Spring的整合

    下面我们将深入探讨Struts和Spring整合的原理、步骤以及相关知识点。 首先,Struts是一个基于MVC设计模式的Java Web框架,它负责处理HTTP请求,执行业务逻辑,并将结果呈现给用户。而Spring则是一个全面的企业级...

    Struts+Spring整合开发实例

    在Struts和Spring整合时,通常会用到Spring的Web MVC框架替换Struts的部分功能,利用Spring的DI和AOP特性来管理Struts的Action。以下是整合的关键步骤: 1. 配置Spring:创建Spring的配置文件(如...

    Struts Hibernate Spring集成开发宝典 源码

    《Struts Hibernate Spring集成开发宝典》以Struts,Hibernate,Spring为核心详细地讲解了这三个组件的基础知识和基本使用方法,并通过一系列集成开发实例讲解了这三个组件在J2EE项目中的应用。《Struts Hibernate ...

    struts1 spring ibatis整合项目源码

    struts1 spring ibatis整合项目源码struts1 spring ibatis整合项目源码struts1 spring ibatis整合项目源码struts1 spring ibatis整合项目源码struts1 spring ibatis整合项目源码struts1 spring ibatis整合项目源码

    struts hibernate spring集成开发宝典光盘源码(二).rar

    这个压缩包“struts hibernate spring集成开发宝典光盘源码(二).rar”显然是一个用于学习这三大框架集成的实践项目,包含了一些示例代码和接口定义。 1. Struts:Struts 是一款开源的MVC(Model-View-Controller...

    Struts+Spring+Hibernate整合教程.pdf

    整合Struts、Spring和Hibernate可以构建出高度模块化的应用,提高开发效率和代码质量。然而,随着Java EE技术的发展,现代Web应用更多地转向Spring Boot、Spring MVC和MyBatis等更现代的解决方案,它们在易用性、...

    struts+spring集成

    10. **性能优化**:整合Struts2和Spring可以优化资源的使用,例如通过缓存策略、减少不必要的对象创建等方法提升系统性能。 集成Struts2和Spring是一个常见的Java Web开发实践,它有助于提高项目的可扩展性、可维护...

    Struts,Hibernate,Spring集成开发宝典.pdf

    《Struts Hibernate Spring集成开发宝典》以Struts,Hibernate,Spring为核心详细地讲解了这三个组件的基础知识和基本使用方法,并通过一系列集成开发实例讲解了这三个组件在J2EE项目中的应用。《Struts Hibernate ...

    struts2和spring整合包

    **Struts2和Spring整合** 整合Struts2和Spring的主要目标是利用两者的优点,创建一个更强大的MVC应用。整合步骤通常包括: 1. **配置Spring**:创建Spring的ApplicationContext配置文件,定义Bean及其依赖。 2. **...

    struts+spring+hibernate实现图书修改和删除

    SSH整合的关键在于配置文件,包括Struts 2的struts.xml、Spring的applicationContext.xml和Hibernate的hibernate.cfg.xml。这些文件定义了各组件之间的关系和行为。例如,struts.xml中配置Action类及其结果视图,...

    struts,与spring整合

    以上内容详细介绍了Struts和Spring整合时涉及的关键知识点,包括依赖注入、Action代理、配置文件调整、AOP集成、模型驱动、国际化、异常处理和测试等方面。理解并掌握这些知识点对于开发高质量的Java Web应用至关...

    struts hibernate spring集成开发宝典光盘源码(一).rar

    struts hibernate spring集成开发宝典光盘源码(一).rar

    struts2和spring和Hibernate整合的jar包

    Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们各自解决应用程序的不同问题,而将这三者整合在一起可以构建高效、灵活的企业级应用。Struts2作为MVC(Model-View-Controller)框架,负责处理用户请求...

    struts2 spring hibernate 整合

    【SSH整合】指的是Struts2、Spring和Hibernate这三个开源框架的集成应用,它们在JavaEE企业级开发中占据着重要地位。Struts2是一个MVC框架,负责处理用户请求和控制应用程序流程;Spring是一个全面的后端解决方案,...

    struts1和spring整合

    Struts1 和 Spring 整合是 Java Web 开发中常见的一种技术组合,它们分别作为 MVC 框架和依赖注入框架,共同提升了应用的可维护性和可扩展性。Struts1 提供了强大的控制器层,而 Spring 提供了业务逻辑处理和依赖...

Global site tag (gtag.js) - Google Analytics