`

Spring 和struts 整合的三种方式

阅读更多
Spring 和 struts 整合的三种方式。

1,使用Spring 的 ActionSupport
2, 使用Spring 的 DelegatingRequestProcessor 类。
3,全权委托。

无论用那种方法来整合第一步就是要为struts来装载spring的应用环境。 就是在 struts 中加入一个插件。
struts-config.xml中

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
  <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/>
</plug-in>


spring 的配置文件被作为参数配置进来。这样可以省略对web.xml 文件中的配置。确保你的applicationContext.xml 在WEB-INF目录下面

1,使用Spring的ActionSupport .
Spring 的ActionSupport 继承至 org.apache.struts.action.Action
ActionSupport的子类可以或得 WebApplicationContext类型的全局变量。通过getWebApplicationContext()可以获得这个变量。

这是一个 servlet 的代码:
public class LoginAction extends org.springframework.web.struts.ActionSupport {

public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) {
  LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stub
                //获得  WebApplicationContext  对象             
  WebApplicationContext ctx = this.getWebApplicationContext();
 
  LoginDao dao = (LoginDao) ctx.getBean("loginDao");
  User u = new User();
 
  u.setName(loginForm.getName());
  u.setPwd(loginForm.getPwd());
 
 
  if(dao.checkLogin(u)){
   return mapping.findForward("success");
  }else{
   return  mapping.findForward("error");
  }
 
}
}

applicationContext.xml 中的配置
<beans>
<bean id="loginDao" class="com.cao.dao.LoginDao"/>
</beans>

这中配置方式同直接在web.xml文件配置差别不大。注意:Action继承自 org.springframework.web.struts.ActionSupport 使得struts和spring耦合在一起。
但实现了表示层和业务逻辑层的解耦(LoginDao dao = (LoginDao) ctx.getBean("loginDao"))。


2,使用Spring 的 DelegatingRequestProcessor 类
DelegatingRequestProcessor  继承自 org.apache.struts.action.RequestProcessor 并覆盖了里面的方法。
sturts-config.xml  中  <controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"/> 通过 <controller >来替代
                        org.apache.struts.action.RequestProcessor 的请求处理。

public class LoginAction extends Action {
//利用spring来注入这个对象。
private LoginDao dao ;

public void setDao(LoginDao dao) {
  System.out.println("执行注入");
  this.dao = dao;
}

public LoginDao getDao() {
  return dao;
}

public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) {
  LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stub
  //这样一改这行代码似乎没有必要了。
  //WebApplicationContext ctx = this.getWebApplicationContext();
  //LoginDao dao = (LoginDao) ctx.getBean("loginDao");

  User u = new User();
 
  u.setName(loginForm.getName());
  u.setPwd(loginForm.getPwd());
 
  //直接用dao来调用spring会将这个对象实例化。
  if(dao.checkLogin(u)){
   return mapping.findForward("success");
  }else{
   return  mapping.findForward("error");
  }
 
}
}
这里的。
LoginAction extends Action 说明 struts 每有和spring 耦合。
看一下
applicationContext.xml 中的配置。
<beans>
<bean id="loginDao" class="com.cao.dao.LoginDao"/>

<bean name="/login" class="com.cao.struts.action.LoginAction">
  <property name="dao">
   <ref local="loginDao"/>
  </property>
</bean>
</beans>

这里 name="/login" 与struts 中的path匹配
    class="com.cao.struts.action.LoginAction" 与struts 中的type匹配

还要为 LoginAction 提供必要的setXXX方法。 获得ApplicationCotext和依赖注入的工作都在DelegatingRequestProcessor中完成。


3,全权委托:
Action 的创建和对象的依赖注入全部由IOC容器来完成。 使用Spring的DelegatingAcionProxy来帮助实现代理的工作
org.springframework.web.struts.DelegatingActiongProxy继承于org.apache.struts.action.Action .


全权委托的配置方式同 方式 2 类似 (applcationContext.xml文件的配置和 Action类的实现方式相同)。
<struts-config>
  <data-sources />
  <form-beans >
    <form-bean name="loginForm" type="com.cao.struts.form.LoginForm" />

  </form-beans>

  <global-exceptions />
  <global-forwards />
<action-mappings >
    <!-- type指向的是spring 的代理类 -->
    <action
      attribute="loginForm"
      input="login.jsp"
      name="loginForm"
      path="/login"
      scope="request"

      type="org.springframework.web.struts.DelegatingActionProxy" >
     
      <forward name="success" path="/ok.jsp" />
      <forward name="error" path="/error.jsp" />
    </action>

</action-mappings>

 
  <message-resources parameter="com.cao.struts.ApplicationResources" />

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
  <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/>
</plug-in>

</struts-config>
不同之处
1, <action>中 type指向的是spring 的代理类

2, 去掉struts-config.xml中 <controller >

三种整和方式中我们优先选用 全权委托的方式。
理由:
1,第一种使得过多的耦合了Spring和Action .
2,RequestProcessor类已经被代理 如果要再实现自己的实现方式(如:编码处理)怕有点麻烦。

总结一下:
整合工作中的步骤:
1,修改struts-config.xml  
2, 配置applicationContext.xml
3, 为Action添加get/set方法 来获得依赖注入的功能。
分享到:
评论

相关推荐

    Spring + struts 整合的三种主要方式

    ### Spring与Struts整合的三种主要方式 在Java Web开发领域,Spring框架和Struts框架都是非常重要的技术。Spring框架以其强大的依赖注入(DI)和面向切面编程(AOP)功能,为Java应用提供了轻量级的解决方案。而...

    Spring 和 struts 整合的三种方式

    以下将详细阐述Spring与Struts整合的三种方式: 1. **使用Spring的ActionSupport** 这种方式是通过让Struts的Action类继承Spring的`ActionSupport`类,使Action类能够访问Spring的ApplicationContext。首先,在`...

    spring和struts整合的三种方案

    以下是整合 Spring 和 Struts 的三种方案的详细说明: 1. **使用 ContextLoaderPlugIn 插件** 在这种方案中,我们通过在 `struts-config.xml` 文件中添加 `ContextLoaderPlugIn` 类来启动 Spring 的 IOC 容器。`...

    Spring与Struts整合3种方式实例

    以下是三种整合 Spring 与 Struts 的方法的详细解释: 1. 通过 Spring 的 `ActionSupport` 类 这种方法是让 Struts 的 Action 类不再继承自 Struts 的 `Action` 类,而是继承 Spring 提供的 `ActionSupport` 类。...

    struts和spring整合的2种方式

    在第一种整合方式中,Struts的`struts-config.xml`配置文件中,我们将`type`属性设置为`org.springframework.web.struts.DelegatingActionProxy`,这表示Struts的Action将由Spring来创建和管理。例如: ```xml ...

    Spring与struts整合开发实例

    Spring与struts整合主要有三种方式,通过Spring的ActionSupport类,通过Spring的DelegatingRequestProcessor类、通过Spring的DelegatingActionProxy类。

    spring与struts2整合

    Spring 和 Struts2 是两个...总之,Spring 和 Struts2 的整合利用了两者的优势,提供了一种强大的方式来构建可扩展、易于维护的 Java Web 应用。通过深入学习和实践,开发者可以掌握这种整合技巧,并在实际项目中应用。

    整合Spring与Struts的几种方法

    接下来,有三种整合Spring和Struts的方法: 1. **继承Spring的ActionSupport类**:Action直接继承Spring的`ActionSupport`,并通过`ApplicationContext`获取服务。这种方式简单,但存在几个缺点:首先,Action与...

    Spring和Struts整合例子

    将Spring与Struts整合可以充分利用两者的优点,提高开发效率和应用的可维护性。 整合Spring和Struts的过程主要包括以下几个关键步骤: 1. **环境准备**:首先,确保你的开发环境中已经安装了Java、Eclipse或...

    Spring与Struts2整合

    Spring提供了一种全面的业务层和持久层管理方案,而Struts2则专注于视图和控制层。整合这两者可以使我们在享受Struts2的优秀UI处理和Action逻辑管理的同时,利用Spring进行更灵活的依赖管理和事务控制。 **二、整合...

    JPA+Spring+Struts整合实例,JPA+Spring+Struts整合实例

    通过以上步骤,你就能完成一个基本的JPA+Spring+Struts整合应用。这种整合方式能充分利用每个框架的优点,提高代码的可维护性和可扩展性,降低开发复杂度。在实际项目中,你可能还需要考虑异常处理、安全控制、性能...

    Spring整合Struts

    另一种整合方式是通过继承Spring的ActionSupport类,这使得开发者能够显式地使用getWebApplicationContext()方法获取Spring管理的bean。这种方式更适用于那些需要深度集成Spring特性的场景,比如AOP或更复杂的依赖...

    spring与struts整合开发包

    6. **国际化与主题支持**:Spring和Struts整合后,可以利用Struts的国际化和主题功能,结合Spring的资源文件加载,实现全球化和界面定制。 7. **错误与异常处理**:通过Spring的AOP,可以集中处理Struts中的异常,...

    Spring与Struts 2整合.zip

    整合Spring和Struts 2的主要目的是将Spring的依赖注入和管理能力引入到Struts 2的Action中,以及利用Spring的AOP进行事务管理。整合步骤通常包括以下几个部分: 1. **添加依赖**:在项目中引入Spring和Struts 2的库...

    spring_struts整合jar包

    2. **Spring MVC与Struts2的集成**:虽然两者都有MVC模式,但在整合时,通常会使用Struts2来处理请求的路由和响应,而Spring MVC则处理更复杂的视图解析和数据绑定。 3. **Spring事务管理**:Spring提供了强大的...

    spring_struts_hibernate整合开发书籍

    《Spring+Struts+Hibernate整合开发》是一本深入讲解企业级Java应用开发的书籍,它主要聚焦于三大著名开源框架——Spring、Struts和Hibernate的集成与应用。这些框架是Java Web开发中的基石,广泛应用于各种复杂的...

    spring 和 struts整合

    将Spring与Struts整合可以充分利用两者的优点,实现松耦合和高效的业务逻辑处理。 在整合Spring和Struts的过程中,主要涉及以下几个关键点: 1. **配置Struts Action**: 在`struts-config.xml`中,我们需要定义...

    Spring和Struts整合用到的jar包

    - Spring也可以通过ViewResolver来解析视图,但通常在Struts整合中,视图解析由Struts完成。 6. **测试和调试**: - 编写单元测试和集成测试,确保Spring和Struts能够正常交互。 - 使用日志框架(如Log4j)记录...

    Struts2整合Spring、JPA

    总的来说,Struts2、Spring和JPA的整合提供了一种高效、灵活的企业级开发架构。Struts2处理Web请求,Spring管理组件和事务,JPA负责数据持久化,三者协同工作,降低了代码的耦合度,提高了开发效率和应用的可维护性...

Global site tag (gtag.js) - Google Analytics