`

ssh整合

阅读更多

摘自: http://blog.csdn.net/czg18596/archive/2007/07/10/1684487.aspx

在已经做好了的hibernate+struts 工程里加入spring(本人一般采用第三种技术)

将 Struts 动作整合到 Spring 框架中

1、使用 Spring 的 ActionSupport 类整合 Structs
2、使用 Spring 的 DelegatingRequestProcessor 覆盖 Struts 的
RequestProcessor
3、将 Struts Action 管理委托给 Spring 框架(其他两种技术请参考其他网站)

首先要建立"装载应用程序环境"
无论您使用哪种技术,都需要使用 Spring 的
ContextLoaderPlugin 为 Struts 的 ActionServlet 装载 Spring
应用程序环境。就像添加任何其他插件一样,简单地向您的struts-config.xml
文件添加该插件,如下所示:

xml 代码
  1. <plug-in className=    
  2. "org.springframework.web.struts.ContextLoaderPlugIn">    
  3. <set-property property=    
  4. "contextConfigLocation" value="/WEB-INF/beans.xml"/>    
  5. </plug-in>   

窍门 3. 将动作管理委托给 Spring
一个更好的解决方法是将 Strut 动作管理委托给
Spring。您可以通过在 struts-config
动作映射中注册一个代理来实现。代理负责在 Spring
环境中查找 Struts 动作。由于动作在 Spring
的控制之下,所以它可以填充动作的 JavaBean
属性,并为应用诸如 Spring 的 AOP
拦截器之类的特性带来了可能。

/**清单 4. 具有 JavaBean 属性的 Struts 动作

java 代码
  1. package ca.nexcel.books.actions;    
  2.   
  3.   
  4. import java.io.IOException;    
  5.   
  6.   
  7. import javax.servlet.ServletException;    
  8. import javax.servlet.http.HttpServletRequest;    
  9. import javax.servlet.http.HttpServletResponse;    
  10.   
  11.   
  12. import org.apache.struts.action.Action;    
  13. import org.apache.struts.action.ActionError;    
  14. import org.apache.struts.action.ActionErrors;    
  15. import org.apache.struts.action.ActionForm;    
  16. import org.apache.struts.action.ActionForward;    
  17. import org.apache.struts.action.ActionMapping;    
  18. import org.apache.struts.action.DynaActionForm;    
  19.   
  20.   
  21. import ca.nexcel.books.beans.Book;    
  22. import ca.nexcel.books.business.BookService;    
  23.   
  24.   
  25. public class SearchSubmit extends Action {    
  26.   
  27.   
  28. private BookService bookService;    
  29. public BookService getBookService() {    
  30. return bookService;    
  31. }    
  32.   
  33.   
  34. public void setBookService(BookService bookService) { | (1)    
  35. this.bookService = bookService;    
  36. }    
  37.   
  38.   
  39. public ActionForward execute(    
  40. ActionMapping mapping,    
  41. ActionForm form,    
  42. HttpServletRequest request,    
  43. HttpServletResponse response)    
  44. throws IOException, ServletException {    
  45.   
  46.   
  47. DynaActionForm searchForm = (DynaActionForm) form;    
  48. String isbn = (String) searchForm.get("isbn");    
  49.   
  50.   
  51. Book book = getBookService().read(isbn.trim()); |(2)    
  52.   
  53.   
  54. if (null == book) {    
  55. ActionErrors errors = new ActionErrors();    
  56. errors.add(ActionErrors.GLOBAL_ERROR,new    
  57. ActionError("message.notfound"));    
  58. saveErrors(request, errors);    
  59. return mapping.findForward("failure") ;    
  60. }    
  61.   
  62.   
  63. request.setAttribute("book", book);    
  64. return mapping.findForward("success");    
  65. }    
  66.   
  67.     
  68.   
  69. }    
  70.   


在清单 4 中,您可以了解到如何创建 Struts 动作。在
(1) 处,我创建了一个 JavaBean
属性。DelegatingRequestProcessor自动地配置这种属性。这种设计使
Struts 动作并不知道它正被 Spring
管理,并且使您能够利用 Sping
的动作管理框架的所有优点。由于您的 Struts
动作注意不到 Spring 的存在,所以您不需要重写您的
Struts 代码就可以使用其他控制反转容器来替换掉
Spring。

DelegatingRequestProcessor
方法的确比第一种方法好,但是仍然存在一些问题。如果您使用一个不同的
RequestProcessor,则需要手动整合 Spring 的
DelegatingRequestProcessor。添加的代码会造成维护的麻烦并且将来会降低您的应用程序的灵活性。此外,还有过一些使用一系列命令来代&shy;替
Struts RequestProcessor 的传闻。
这种改变将会对这种解决方法的使用寿命造成负面的影响
**/

清单 5 中的 Action 类与清单 4 中的相同。但是
struts-config 有一些不同:


清单 5. Spring 整合的委托方法

xml 代码
  1. <?xml version="1.0" encoding="ISO-8859-1" ?>    
  2.   
  3.   
  4. <!DOCTYPE struts-config PUBLIC    
  5. "-//Apache Software Foundation//DTD Struts Configuration    
  6. 1.1//EN"    
  7.   
  8.   
  9. "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">    
  10.   
  11.   
  12. <struts-config>    
  13. <form-beans>    
  14. <form-bean name="searchForm"    
  15. type="org.apache.struts.validator.DynaValidatorForm">    
  16. <form-property name="isbn" type="java.lang.String"/>    
  17. </form-bean>    
  18.   
  19.   
  20. </form-beans>    
  21.   
  22.   
  23. <global-forwards type="org.apache.struts.action.ActionForward">    
  24. <forward name="welcome" path="/welcome.do"/>    
  25. <forward name="searchEntry" path="/searchEntry.do"/>    
  26. <forward name="searchSubmit" path="/searchSubmit.do"/>    
  27. </global-forwards>    
  28.   
  29.   
  30. <action-mappings>    
  31. <action path="/welcome" forward="/WEB-INF/pages/welcome.htm"/>    
  32. <action path="/searchEntry"    
  33. forward="/WEB-INF/pages/search.jsp"/>    
  34. <action path="/searchSubmit"    
  35.   
  36.   
  37. type="org.springframework.web.struts.DelegatingActionProxy" |(1)    
  38. input="/searchEntry.do"    
  39. validate="true"    
  40. name="searchForm">    
  41. <forward name="success" path="/WEB-INF/pages/detail.jsp"/>    
  42. <forward name="failure" path="/WEB-INF/pages/search.jsp"/>    
  43. </action>    
  44.   
  45.   
  46. </action-mappings>    
  47.   
  48.   
  49. <message-resources parameter="ApplicationResources"/>    
  50.   
  51.   
  52. <plug-in className="org.apache.struts.validator.ValidatorPlugIn">    
  53. <set-property    
  54. property="pathnames"    
  55. value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>    
  56. </plug-in>    
  57.   
  58.   
  59. <plug-in    
  60. className="org.springframework.web.struts.ContextLoaderPlugIn">    
  61. <set-property property="contextConfigLocation"    
  62. value="/WEB-INF/beans.xml"/>    
  63. </plug-in>    
  64.   
  65.   
  66. </struts-config>    
  67.   


清单 5 是一个典型的 struts-config.xml
文件,只有一个小小的差别。它注册 Spring
代理类的名称,而不是声明动作的类名,如(1)处所示。DelegatingActionProxy
类使用动作映射名称查找 Spring
环境中的动作。这就是我们使用 ContextLoaderPlugIn
声明的环境。


将一个 Struts 动作注册为一个 Spring bean
是非常直观的,如清单 6 所示。我利用动作映射使用
<bean> 标记的名称属性(在这个例子中是
"/searchSubmit")简单地创建了一个 bean。这个动作的
JavaBean 属性像任何 Spring bean 一样被填充:


清单 6. 在 Spring 环境中注册一个 Struts 动作

xml 代码
  1. <?xml version="1.0" encoding="UTF-8"?>    
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"    
  3. "http://www.springframework.org/dtd/spring-beans.dtd">    
  4.   
  5.   
  6. <beans>    
  7. <bean id="bookService"    
  8. class="ca.nexcel.books.business.BookServiceImpl"/>    
  9.   
  10.   
  11. <bean name="/searchSubmit"    
  12. class="ca.nexcel.books.actions.SearchSubmit">    
  13. <property name="bookService">    
  14. <ref bean="bookService"/>    
  15. </property>    
  16. </bean>    
  17.   
  18.   
  19. </beans>    
  20.   
  21.   
  22.   

动作委托的优点
动作委托解决方法是这三种方法中最好的。Struts
动作不了解 Spring,不对代码作任何改变就可用于非
Spring 应用程序中。RequestProcessor
的改变不会影响它,并且它可以利用 Spring AOP
特性的优点。


动作委托的优点不止如此。一旦让 Spring 控制您的
Struts 动作,您就可以使用 Spring
给动作补充更强的活力。例如,没有 Spring
的话,所有的 Struts
动作都必须是线程安全的。如果您设置 <bean> 标记的
singleton
属性为"false",那么不管用何种方法,您的应用程序都将在每一个请求上有一个新生成的动作对象。您可能不需要这种特性,但是把它放在您的工具箱中也很好。&shy;您也可以利用
Spring 的生命周期方法。例如,当实例化 Struts
动作时,<bean> 标记的 init-method
属性被用于运行一个方法。类似地,在从容器中删除
bean 之前,destroy-method
属性执行一个方法。这些方法是管理昂贵对象的好办法,它们以一种与
Servlet 生命周期相同的方式进行管理。


在本文中,您已经学习了将 Struts 动作整合到 Spring
框架中的三种窍门。使用 Spring 的 ActionSupport 来整合
Struts(第一种窍门中就是这样做的)简单而快捷,但是会将
Struts 动作与 Spring
框架耦合在一起。如果您需要将应用程序移植到一个不同的框架,则需要重写代码。第二种解决方法通过委托
RequestProcessor
巧妙地解开代码的耦合,但是它的可扩展性不强,并且当
Struts 的 RequestProcessor
变成一系列命令时,这种方法就持续不了很长时间。第三种方法是这三种方法中最好的:将
Struts 动作委托给 Spring
框架可以使代码解耦,从而使您可以在您的 Struts
应用程序中利用 Spring
的特性(比如日志记录拦截器)。

分享到:
评论

相关推荐

    SSH整合Jar包

    SSH整合在JavaWeb开发中是一项重要的技术组合,它包含了三个主要的开源框架:Spring、Struts和Hibernate。这些框架分别负责应用的业务逻辑管理、视图层控制和数据持久化。接下来,我们将深入探讨SSH整合的关键知识点...

    SSH整合jar包

    SSH整合jar包是一个集合了所有在Java开发中用于Spring、Struts和Hibernate(SSH)集成应用所需的库文件的压缩包。SSH是Java企业级开发中非常流行的一种框架组合,它能够帮助开发者快速构建高效、可维护的企业级Web...

    ssh整合jar包

    SSH整合是Java Web开发中的一种常见模式,它结合了Struts2、Spring和Hibernate三个开源框架,以实现高效、灵活的MVC(Model-View-Controller)架构。在这个"ssh整合jar包"中,包含了这三个框架的核心库和其他必要的...

    ssh整合所需要的jar包

    SSH整合,全称为Struts2、Spring和Hibernate的整合,是Java Web开发中常见的技术栈。这三种框架分别负责表现层、业务层和持久层的管理,通过合理的整合,可以构建出高效、灵活且易于维护的Web应用。下面将详细介绍...

    ssh整合所需所有架包

    SSH整合是Java开发中一种常见的框架集成方式,它结合了Struts2、Spring和Hibernate三个开源框架,以实现高效、灵活的企业级应用开发。这里提到的"ssh整合所需所有架包"是一个包含这三个框架相应版本的集合,确保它们...

    SSH整合增删改查全部

    SSH整合是Java Web开发中常见的一个技术组合,指的是Spring、Struts和Hibernate三个开源框架的集成。Spring提供了依赖注入和面向切面编程的能力,Struts则处理MVC(Model-View-Controller)架构中的控制器部分,而...

    SSH整合经典实例

    SSH整合经典实例主要涉及到的是Java开发中的三大框架:Spring、Struts和Hibernate的集成应用,这些框架在J2EE体系中被广泛使用,为开发者提供了高效、便捷的开发环境。SSH整合是Java企业级开发中一种常见的解决方案...

    SSH整合 银行管理系统

    SSH整合在IT行业中通常指的是Struts、Hibernate和Spring三大框架的集成应用,它们是Java Web开发中的重要组件,尤其在企业级应用系统中广泛应用。银行管理系统是一个典型的业务复杂、安全性要求高的应用场景,SSH...

    SSH整合的jar包.zip

    SSH整合是指Spring、Struts和Hibernate这三大开源框架的集成应用。这三种框架分别负责不同的职责:Spring作为应用的管理核心,提供依赖注入(DI)和面向切面编程(AOP);Struts则主要处理MVC(模型-视图-控制器)...

    SSH整合的一个案例

    SSH整合在IT行业中通常指的是Spring、Struts和Hibernate这三个开源框架的集成应用。Spring作为核心容器,负责管理对象(依赖注入DI)和事务处理;Struts则是MVC(Model-View-Controller)设计模式的实现,处理用户...

    SSH整合例子(SSH例子)

    SSH整合是Java开发中一种常见的框架组合,包括Spring、Struts和Hibernate三个核心组件。Spring提供了依赖注入(DI)和面向切面编程(AOP),Struts负责MVC模式的实现,而Hibernate则是用于对象关系映射(ORM)。在这...

    SSH整合小案例,实用性比较强

    SSH整合是软件开发中一种常见的技术实践,主要指的是Spring、Struts和Hibernate这三大开源框架的集成应用。这个小案例提供了SSH整合的具体实现,对于项目研发具有很高的实用价值。下面我们将详细探讨SSH整合的关键...

    ssh整合所需jar包

    SSH整合是指将Struts、Spring和Hibernate这三个Java开源框架结合在一起,用于构建高效、可维护的企业级Web应用程序。Struts提供了MVC(Model-View-Controller)架构,Spring强化了依赖注入和事务管理,而Hibernate则...

    SSH整合小项目

    SSH整合是Java Web开发中的一种常见技术栈,主要包括Spring、Struts和Hibernate这三个框架的集成。这个名为"SSH整合小项目"的资源提供了一个实践示例,帮助开发者理解和掌握这三大框架协同工作的机制。 首先,...

    SSH整合实例源码

    SSH整合是Java Web开发中的一个常见实践,它指的是Struts 2、Hibernate和Spring这三大框架的集成。这个"SSH整合实例源码"提供了一种实际应用这些框架的方法,帮助开发者理解如何在项目中有效地结合它们。以下是关于...

    ssh整合 jar包

    SSH整合是指在Java Web开发中,将Spring、Struts2和Hibernate这三大开源框架进行集成,以实现高效、灵活和可扩展的业务应用。这些框架分别负责不同的职责:Spring作为核心容器,管理对象的依赖注入;Struts2是MVC...

    SSH整合原理以及步骤详解

    SSH整合是软件开发中的一种常见技术,主要用于Spring、Struts和Hibernate这三大开源框架的集成。这篇文章将深入探讨SSH整合的原理以及实现步骤,帮助初学者掌握这一关键技能。 **一、SSH框架简介** 1. **Spring...

Global site tag (gtag.js) - Google Analytics