`
小瓶盖
  • 浏览: 3397 次
  • 性别: Icon_minigender_2
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

学习SSH中的一点心得

阅读更多
Spring 和struts 整合的三种方式
转载:http://blog.csdn.net/caoyinghui1986/archive/2008/06/02/2501914.aspx 

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动作三种整合【转自www.bitsCN.com】 
http://www.bitscn.com/java/spring/200611/82155.html 
分享到:
评论

相关推荐

    SSH项目源码及心得体会

    这个"SSH项目源码及心得体会"的资源对于初学者来说尤其宝贵,因为它不仅包含了实际项目的源代码,还记录了开发者在整合和使用SSH框架过程中的心得与经验。 Struts2是MVC(Model-View-Controller)架构模式的一种...

    ssh三大框架学习心得

    学习SSH框架的过程中,你可能会遇到以下关键知识点: 1. **MVC模式**:理解MVC架构的基本原理,如何在Struts中划分模型、视图和控制器,以及它们之间的协作方式。 2. **Struts配置**:学习struts-config.xml和web....

    ssh2 学习学习

    ssh2 学习学习

    ssh学习笔记1 ssh学习笔记1

    ssh学习笔记1 ssh学习笔记1 ssh学习笔记1 ssh学习笔记1 ssh学习笔记1 ssh学习笔记1 ssh学习笔记1

    SSH学习模板二 SSH学习模板

    SSH学习模板 SSH学习模板 SSH学习模板 SSH学习模板

    Java SSH 框架整合,学习源码

    Java SSH 框架整合是Java开发中常见的一项技术,主要涉及...总之,Java SSH框架整合是Java Web开发中的基础技能,掌握这一技能能帮助开发者更好地应对复杂的业务场景,并为后续学习更先进的开发技术打下坚实的基础。

    2016年javaWeb学习SSH注解整合例子demo

    SSH(Struts2、Spring、Hibernate)是JavaWeb开发中的经典组合,常用于构建企业级应用。本教程将详细讲解2016年SSH框架整合时使用注解的方式,以提高开发效率并降低配置复杂度。 1. **Struts2**:作为MVC框架,...

    ssh2学习视频

    3. **公钥认证**:学习如何生成SSH密钥对,将公钥添加到远程主机的`~/.ssh/authorized_keys`文件中,实现无密码登录,以及如何管理和备份密钥。 4. **SSH连接命令**:掌握`ssh`命令的基本用法,如直接登录、通过...

    SSH学习笔记4 SSH学习笔记4

    SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记

    SSH学习笔记7 SSH学习笔记7

    SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记

    SSH学习笔记2 SSH学习笔记2

    SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记

    SSH学习笔记9 SSH学习笔记9

    SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记

    SSH学习笔记8 SSH学习笔记8

    SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记

    SSH框架学习笔记,学习交流

    学习笔记,框架,SSH,学习笔记学习笔记,框架,SSH,学习笔记学习笔记,框架,SSH,学习笔记学习笔记,框架,SSH,学习笔记学习笔记,框架,SSH,学习笔记学习笔记,框架,SSH,学习笔记学习笔记,框架,SSH,学习笔记

    ssh框架总结_ ssm心得体会-Java文档类资源

    学习SSH框架的过程中,除了基本的配置和使用,还需要理解它们的设计原则和最佳实践,例如AOP的应用、事务管理策略、性能优化等方面的知识。此外,随着技术的发展,Spring Boot和MyBatis等新型框架逐渐成为主流,了解...

    SSH学习笔记SSH

    SSH,全称Secure Shell,是一种网络协议,用于在不安全的网络环境中提供安全的远程登录和其他服务。在IT行业中,SSH常被用作Linux或Unix系统中的标准安全工具,允许用户进行加密的数据传输,例如执行命令、管理...

    ssh框架 ssh框架 ssh框架 ssh框架 ssh框架 ssh框架 ssh框架 ssh框架

    ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ...

    ssh项目源码(学习ssh的非常好的实例项目)

    本代码主要功能是模仿QQ和论坛的功能(增/删/改/查/验证),充分运用了struts/hibernate/spring中的大多数知识点,思路非常清晰,目前功能尚未完善,但可供学习ssh框架技术的程序员研究,后继版本我会尽早发出,有什么问题可...

Global site tag (gtag.js) - Google Analytics