`

Strurs+Spring整合2

阅读更多

struts与spring三种整合方法_2

分类:默认栏目

窍门 2. 覆盖 RequestProcessor

       将 Spring 从 Struts 动作中分离是一个更巧妙的设计选择。分离的一种方法是使用 org.springframework.web.struts.DelegatingRequestProcessor 类来覆盖 Struts 的 RequestProcessor 处理程序,如清单 2 所示:


清单 2. 通过 Spring 的 DelegatingRequestProcessor 进行整合

xml 代码
  1. <?xml version="1.0" encoding="ISO-8859-1" ?>  
  2. <!DOCTYPE struts-config PUBLIC   
  3.             "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"   
  4.             "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">  
  5. <struts-config>  
  6.  <form-beans>  
  7.       <form-bean name="searchForm"    
  8.         type="org.apache.struts.validator.DynaValidatorForm">  
  9.                  <form-property name="isbn"      type="java.lang.String"/>  
  10.       </form-bean>  
  11.     </form-beans>  
  12.  <global-forwards type="org.apache.struts.action.ActionForward">  
  13.        <forward     name="welcome"                  path="/welcome.do"/>  
  14.        <forward     name="searchEntry"              path="/searchEntry.do"/>  
  15.        <forward     name="searchSubmit"             path="/searchSubmit.do"/>  
  16.  </global-forwards>  
  17.  <action-mappings>  
  18.       <action      path="/welcome" forward="/WEB-INF/pages/welcome.htm"/>  
  19.       <action      path="/searchEntry" forward="/WEB-INF/pages/search.jsp"/>  
  20.       <action      path="/searchSubmit"    
  21.                  type="ca.nexcel.books.actions.SearchSubmit"  
  22.                  input="/searchEntry.do"  
  23.                  validate="true"  
  24.                  name="searchForm">  
  25.                 <forward name="success" path="/WEB-INF/pages/detail.jsp"/>  
  26.                 <forward name="failure" path="/WEB-INF/pages/search.jsp"/>  
  27.       </action>       
  28.  </action-mappings>  
  29.  <message-resources parameter="ApplicationResources"/>  
  30.  <controller processorClass="org.springframework.web.struts.   
  31.      DelegatingRequestProcessor"/> |(1)   
  32.  <plug-in className="org.apache.struts.validator.ValidatorPlugIn">  
  33.       <set-property property="pathnames"    
  34.         value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>  
  35.  </plug-in>  
  36.  <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">  
  37.       <set-property property="csntextConfigLocation" value="/WEB-INF/beans.xml"/>  
  38.  </plug-in>  
  39. </struts-config>  
  40.         


      我利用了 <controller> 标记来用 DelegatingRequestProcessor 覆盖默认的 Struts RequestProcessor。下一步是在我的 Spring 配置文件中注册该动作,如清单 3 所示:


清单 3. 在 Spring 配置文件中注册一个动作

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. <beans>  
  5.     <bean id="bookService" class="ca.nexcel.books.business.BookServiceImpl"/>  
  6.     <bean name="/searchSubmit"    
  7.       class="ca.nexcel.books.actions.SearchSubmit"> |(1)   
  8.        <property name="bookService">  
  9.           <ref bean="bookService"/>  
  10.        </property>  
  11.     </bean>  
  12. </beans>  
  13.         


      注意:在 (1) 处,我使用名称属性注册了一个 bean,以匹配 struts-config 动作映射名称。SearchSubmit 动作揭示了一个 JavaBean 属性,允许 Spring 在运行时填充属性,如清单 4 所示:


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


package ca.nexcel.books.actions;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;
import ca.nexcel.books.beans.Book;
import ca.nexcel.books.business.BookService;
public class SearchSubmit extends Action {
 
    private BookService bookService;
    public BookService getBookService() {
      return bookService;
    }
    public void setBookService(BookService bookService) { | (1)
      this.bookService = bookService; 
    } 
    public ActionForward execute(
      ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response)
      throws IOException, ServletException {
      DynaActionForm searchForm = (DynaActionForm) form;
      String isbn = (String) searchForm.get("isbn");
    
    Book book = getBookService().read(isbn.trim());  |(2)
      if (null == book) {
        ActionErrors errors = new ActionErrors();
        errors.add(ActionErrors.GLOBAL_ERROR,new ActionError("message.notfound"));
        saveErrors(request, errors);
        return mapping.findForward("failure") ;
    }
        request.setAttribute("book", book);
        return mapping.findForward("success");
    }
}
      

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

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

你可以通过这个链接引用该篇文章:http://pearlkeeper.bokee.com/tb.b?diaryId=15898726

分享到:
评论

相关推荐

    java strurs+hibernate+spring环境搭建与配置

    2. **Spring配置**: - 将Spring框架的JAR文件也放入`WEB-INF/lib`目录。 - 创建Spring配置文件(如`applicationContext.xml`),定义Bean及其依赖关系。在本例中,`LoginService`和其实现类`LoginServiceImpl`...

    JavaEE课程设计,使用ssh框架进行开发(strurs2.5+spring4.3+hiberna_Java

    JavaEE课程设计,使用ssh框架进行开发(strurs2.5+spring4.3+hiberna_JavaEE-ssh

    Struts2+hibernate+spring整合泛型DAO

    总结来说,"Struts2+hibernate+spring整合泛型DAO"是一种常见的Java Web开发模式,它利用三大框架的优势,结合泛型设计,提高了代码复用,降低了维护成本,使得开发者能更专注于业务逻辑,而不是基础架构。

    myeclipse+strurs+hibernate简单添加删除例子

    7. **配置文件设定**:编写Struts配置文件(struts-config.xml或struts2的struts.xml)和Hibernate配置文件(hibernate.cfg.xml),定义动作映射和数据库连接信息。 8. **JSP页面设计**:创建用户界面,通常包含...

    Struts+hibernate+jsp整合的商城销售系统

    Myeclipse完美运行的一个商城销售系统,支持后台管理员操作前台修改页面。增加商品,修改商品分类,修改会员,订单... 使用的Strurs2+hibernate+jsp技术,Mysql的数据库,已有数据库sql,导入直接运行!功能非常强大!

    S2SH 完整项目 strurs2 spring hibernate

    **S2SH(Struts2 + Spring + Hibernate)框架整合详解** S2SH 是一个经典的 Java Web 开发框架组合,由 Struts2、Spring 和 Hibernate 三个组件组成。这三个框架协同工作,为开发者提供了一个强大的、灵活的和可...

    struts+spring

    同时,为了实现Struts和Spring的整合,你需要配置一个Spring插件,如`struts-plugin.xml`,该文件告诉Struts如何查找和使用由Spring管理的bean。 3. **配置Spring**:在`applicationContext.xml`文件中,你需要定义...

    Struts2和Spring整合

    3. **Struts2与Spring整合的意义**:整合这两个框架的主要目的是利用Struts2的优秀控制层和视图层处理,结合Spring的强大依赖注入和事务管理功能,提高代码的可测试性和解耦性。同时,通过Spring管理Struts2的Action...

    利用spring管理strurs里的Action

    2. **更好的测试性**:Action可以被设计为无状态,方便进行单元测试。 3. **解耦合**:Action的创建和管理由Spring负责,与Struts的配置分离,增强了系统的灵活性。 4. **AOP支持**:可以利用Spring的AOP功能实现...

    strurs2 入门 登录 参数请求 配置 方法动态调用易懂pdf资料

    总结,这份"strurs2 入门 登录 参数请求 配置 方法动态调用易懂pdf资料"涵盖了Struts2的基础和核心概念,对于初学者来说,是一份非常实用的学习材料。通过学习和实践,开发者能够快速上手Struts2,进而高效地开发...

    strurs2上传 上传进度条 apple上传 等资料

    Struts2是一个非常著名的Java Web框架,用于构建和维护可扩展且易于管理的企业级应用程序。在Struts2中,处理文件上传是常见的需求,而上传进度条和Applet上传则是提高用户体验的重要技术。 首先,让我们深入理解...

    Strurs的简介

    Strurs框架的核心优势在于其高度的模块化设计,以及对业务逻辑和表示层的清晰分离,这使得开发者能够更加专注于应用逻辑的实现,而无需过多关注底层细节。 #### 二、Struts配置详解 在Struts中,`struts.xml`是...

    strurs环境所需jar文件

    12. **Spring集成**:如果项目使用Spring框架,还需要`struts2-spring-plugin.jar`,以实现Struts 2和Spring的无缝集成。 13. **测试支持**:`struts2-test-plugin.jar`提供了测试工具,可以帮助开发者进行单元测试...

    Jsp+Strurs助人电子商城项目实战

    2. **配置文件**:`struts-config.xml`是Struts的核心配置文件,定义了Action映射、数据源、结果跳转等信息。 3. **ActionForm**:用于封装用户提交的数据,与Action类配合处理表单请求。 4. **Interceptor(拦截器...

    java-Strurs原理

    2. **struts-config.xml**:这个配置文件是 Struts 应用的核心,定义了 Action 映射、数据源、表单 Bean 等设置,是控制器与模型和视图之间交互的蓝图。 3. **ActionForm**:表示视图层与控制器之间传递的数据对象...

    struts2+jquery+json+ajax例子

    Struts2、jQuery、JSON和Ajax是Web开发中常见的技术栈,它们共同为构建动态、交互式的用户界面提供了强大的支持。下面将详细解释这些技术及其在登录示例中的应用。 Struts2是一个基于MVC(Model-View-Controller)...

    strurs例子

    **2. Struts核心组件** - **Action类**:这是控制器的主要实现,用于处理用户的HTTP请求,并调用相应的业务逻辑。 - **ActionForm**:负责收集和验证来自用户的数据,这些数据通常是从表单提交的。 - **Action...

    struts2 dao 原理与设计方案

    Struts2 DAO(数据访问对象)原理与设计方案是构建企业级Java应用中不可或缺的一部分,它主要负责处理数据的持久化,即将Java对象存入数据库、文件或XML文档等持久存储介质。DAO的主要目的是将数据访问的逻辑从业务...

    Struts、Hibernate入门代码

    Struts和Hibernate是Java开发中两个非常重要的框架,它们分别用于处理MVC(Model-View-...在后续的开发中,你还可以继续探索Spring框架,将这三个组件整合成Spring MVC+Hibernate,形成更强大的企业级应用解决方案。

    基于strurs2文件上传,利用FTP将文件直接上传至指定的FTP服务器

    Struts2是一个流行的Java Web框架,它为开发者提供了一种模型-视图-控制器(MVC)架构,便于创建和管理动态Web应用。在Struts2中实现文件上传功能是常见的需求,而结合FTP(File Transfer Protocol)服务,我们可以...

Global site tag (gtag.js) - Google Analytics