`
jetway
  • 浏览: 483824 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Spring 和 struts1.2 整合的三种方式

    博客分类:
  • java
 
阅读更多

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整合集成Struts1.2最简单例子

    将Spring与Struts1.2整合,可以利用Spring的强大功能来管理Struts的Action和业务逻辑,提高代码的可测试性和可维护性。 4. **整合步骤** - **配置Spring**:首先创建Spring配置文件(如`applicationContext.xml`...

    struts1.2+spring2.0 登录 例子

    这个“struts1.2+spring2.0 登录例子”是一个整合了这两个框架的示例项目,旨在帮助开发者理解如何在实际应用中集成和使用它们。下面将详细阐述这两个框架的核心概念、集成方式以及登录功能的实现。 **Struts1.2...

    Struts1.2+Spring1.2+Hibernate3.0企业人力资源管理系统

    总结来说,"Struts1.2+Spring1.2+Hibernate3.0企业人力资源管理系统"是一个集成了主流JavaEE框架的实践案例,它展示了如何利用这些工具和技术实现复杂的企业级应用。对于学习者而言,深入研究这个项目可以加深对MVC...

    Struts 1.2+Hibernate3.3+Spring3.0整合详细步骤+源码

    文档"Struts 2.1+Hibernate3.3+Spring3.0整合详细步骤.doc"可能包含了上述步骤的详细过程,帮助读者理解如何将Struts 2.1(注意标题是1.2,但文档可能是2.1版本的误写)与Hibernate 3.3和Spring 3.0进行整合。...

    Ext+Struts1.2整合

    在IT行业中,"Ext+Struts1.2整合"是一个常见的Web开发技术组合,涉及到两个主要的开源框架:ExtJS(一个JavaScript库)和Struts1.2(一个Java服务器端MVC框架)。这两个框架的整合是为了解决前端用户界面的丰富性和...

    Struts1.2中文学习手册

    Struts1.2中文学习手册是一本面向初学者的指南,它涵盖了Struts1.2的基础知识、配置、控制器、模型、视图以及动作和业务逻辑的整合。 首先,手册会介绍Struts1.2的核心概念,包括Action类、Form Bean和Tiles布局。...

    ibatis spring struts1.2

    "ibatis spring struts1.2"是一个经典的Java企业级开发组合,它将三个强大的技术——iBatis(一个轻量级的持久层框架)、Spring(一个全面的企业应用框架)和Struts1.2(一个MVC框架)结合在一起,为Web应用程序提供...

    Ibatis Struts1.2 Spring 2.0 整合终极版

    Ibatis Struts1.2 Spring 2.0 整合终极版,Ibatis Struts1.2 Spring 2.0 整合终极版,Ibatis Struts1.2 Spring 2.0 整合终极版

    SSH整合实例教程Struts1.2 + hibernate3.1 + spring2.0

    eclipse整合Struts1.2 + hibernate3.1 + spring2.0 相关链接:http://blog.csdn.net/shellwin/archive/2010/07/02/5708865.aspx

    Spring1.2+Struts1.2+hibernate3.1 整合包

    Spring1.2+Struts1.2+hibernate3.1 整合包

    Struts1.2+Spring2.5+Hibernate3.2框架搭建(一)

    文档"Struts1.2+Spring2.5+Hibernate3.2框架搭建(周禄康).doc"和"Struts1.2+Spring2.5+Hibernate3.2框架搭建(原版)(周禄康).doc"可能包含了详细的步骤和示例代码,帮助读者理解如何实际操作。"Struts+...

    spring2.0+struts1.2+hibernate3

    提供的"spring2.0和struts1.2和hibernate3集成环境配置指导.doc"文档应该包含了详细的步骤和示例代码,对于初学者来说是非常宝贵的资源。"spring_test.sql"可能包含了一些测试数据的SQL脚本,用于初始化数据库。最后...

    struts1.2,spring2,hibernate3整合实例代码 改进

    Struts1.2、Spring2和Hibernate3是Java Web开发中的三大框架,它们的整合是构建企业级应用的常见方式。这个"struts1.2,spring2,hibernate3整合实例代码 改进"提供了对这三者集成的一种改进方案,主要目标是提升系统...

    spring2.5 struts1.2 hibernate3.0完美全部jar包

    Struts1.2版本是在Struts1.x系列中的一个稳定版本,它提供了一种组织应用逻辑的方式,通过Action和Form Bean来处理用户请求。这个版本支持自定义标签库,增强了国际化和异常处理能力。 3. **Hibernate ORM框架3.0**...

    struts1.2+spring2.0整合

    Struts1.2和Spring2.0的整合是Java企业级开发中常见的一种技术组合,它们各自在Web应用中承担着不同的职责。Struts1.2作为MVC框架,负责控制应用程序的流程,而Spring2.0则是一个全面的轻量级应用框架,提供了依赖...

    Struts1.2+Spring 3.0 案例,java代码

    Struts1.2和Spring 3.0是两个在Java Web开发中广泛使用的框架,它们分别专注于MVC...同时,案例中的Java代码提供了实践应用这些理论知识的实例,对于深入理解和掌握Struts1.2+Spring 3.0的整合开发具有很高的价值。

    Struts1.2+Spring1.2+HIbernate3.1整合示例代码

    Struts1.2、Spring1.2和Hibernate3.1是经典的Java企业级开发框架组合,通常被称为SSH(Struts + Spring + Hibernate)集成。这个整合示例代码提供了一个全面的学习资源,帮助开发者理解如何将这三个强大的框架有效地...

    struts1.2+spring2.0+hibernate3.1框架整合实例

    采用在web.xml中加载spring配置文件的方法降低struts和spring的耦合度,使用自定义的MyDelegatingRequestProcessor类来代替spring的DelegatingRequestProcessor类来解决spring中action的bean的重复配置问题。...

    struts1.2+hibernate3.2+spring2.5+dwr

    Struts1.2、Hibernate3.2、Spring2.5 和 DWR2.0 是一组经典的Java企业级开发框架组合,它们在Web应用程序开发中扮演着重要的角色。这些框架的集成为开发人员提供了强大的功能,使得后端数据管理、业务逻辑处理以及...

Global site tag (gtag.js) - Google Analytics