基于Struts\Spring和Hibernate的J2EE框架整合方法探讨(2)

来源:网络(转载) 作者:王美琴 发表于:2011-09-19 15:45  点击:
【关健词】J2EE;Struts;Spring;Hibernate;整
3.1 装载应用程序环境 无论使用哪种方法,都需要使用Spring的ContextLoaderPlugin为Struts的ActionServlet 装载Spring应用程序环境。就像添加任何其他插件一样,简单地在struts-config.xml文件添加该插件,代码如下

  3.1 装载应用程序环境
  无论使用哪种方法,都需要使用Spring的ContextLoaderPlugin为Struts的ActionServlet 装载Spring应用程序环境。就像添加任何其他插件一样,简单地在struts-config.xml文件添加该插件,代码如下:
  
     “org.springframework.web.struts.ContextLoaderPlugin”>
  
  
  
  3.2 Struts与Spring框架的整合
  目前Struts 与Spring框架常见的整合技术有下列三种:
  1) 使用Spring的ActionSupport类整合Struts;
  2) 使用Spring 的 DelegatingRequestProcessor 覆盖 Struts 的 RequestProcessor;
  3) 将Struts Action管理委托给Spring 框架。
  下面对前两种方法进行简单的介绍,并给出第三种方法具体实现的步骤。
  1) 使用Spring的ActionSupport类整合Struts
  手动创建一个 Spring 环境是一种整合 Struts 和 Spring 的最直观的方式。需要注意的地方是:①通过从 Spring 的 ActionSupport 类而不是 Struts 的 Action 类进行扩展,从而创建了一个新的 Action;②使用org.springframework.web.struts.ActionSupport 类提供的getWebApplicationContext() 方法获得一个 ApplicationContext。这种技术很简单容易,但替换麻烦需要重写代码。
  2) 使用Spring 的 DelegatingRequestProcessor 覆盖 Struts 的 RequestProcessor
  这种方法分三步进行:第一步是在struts-config.xml文件中加入:;第二步是在 Spring 上下文配置文件中用名称属性注册一个bean,以匹配 struts-config 动作映射名称;第三步是通过创建了一个JavaBean属性创建Struts动作,DelegatingRequestProcessor自动地配置这种属性。DelegatingRequestProcessor方法的确比第一种方法好,但仍然存在一些问题,如果使用一个不同的RequestProcessor,则需要手动整合Spring的DelegatingRequestProcessor,添加的代码会造成维护的麻烦并且将来会降低应用程序的灵活性。
  3) 将 Struts Action管理委托给Spring框架
  这种方法通过Spring提供的两个和Struts相关类来实现:org.springframework.web.struts. DelegatingActionProxy,org.springframework.web.struts.ContextLoaderPlugIn。ContextLoaderPlugIn实现Struts的PlugIn接口,需要在struts-config.xml中作相应的配置,然后在applicationContext.xml中配置相应的节点,委托以后,修改Struts-config.xml中的action属性,使action的type值不指向具体的实现类,统一改为代理类type="org.springframework.web.struts.DelegatingActionProxy",在applicationContext.xml中的bean name值设定与Struts-config.xml中action path值一样,以使代理类能够根据传入的path在springContext环境中找到相应的bean,并将实例返回给Struts。这在三种方法中是最好的,但同时也存在一些问题,考虑做些改进。可以对RequestProcessor类的ProcessActionCreate()方法进行一些扩展,使得ProcessActionCreate()方法把ActionServlet实例纳入Spring的容器管理。主要代码摘录如下:
  Protected Action processActionCreate(HttpServletRequest rq,HttpServletResponse rs,ActionMapping mp) throws IOException{
  try{//查找相关Bean
  String bName=DelegatingActionUtils.determineActionBeanName(mp);
  //返回Bean的实例
  //监控Servlet当前状态和对Servlet进行操作。
  Return(Action);this.webApplicationContext.getBean(beanName,Action.class);}
  Catch(NoSuchBeanDefinitionException ex){
 Return super.processActionCreate(rq,rs,mp);}
  }
  最后,在Struts配置文件struts-config.xml中加上声明,通知Struts执行时调用RequestProcessor的扩展类DelegatingStruts。使得Struts加载Action时,DelegatingStruts会根据提供的参数,找到对应的Bean,实现Spring提供的所有服务,并把实例返回给Struts。
  3.3 Spring和Hibernate框架整合的实现方法
  Spring整合Hibernate主要是对Hibernate的Session进行管理,包含Session的创建、提交、关闭的整个生命周期。
  1) 配置SessionFactory,让Spring来创建Session.
  在Hibernate的配置文件或者在Spring的配置文件中均可以进行SessionFactory的配置,选择使用Spring来对Hibernate进行管理,这样最后生成的工程里就不包含hibernate.cfg.xml了,好处是在一个地方就可以对Hibernate进行管理了。
  2) 配置事务管理器
  增加如下代码:
  ?
  3) 对事务管理器进行事务设置
  增加如下代码:
   ??
  最后可以把事务应用到具体的类中就完成了整合过程。
  4 结束语
  Struts+Spring+Hibernate框架是目前众多软件企业主流的应用技术,Struts作为一种MVC的实现,很好地实现了显示逻辑与业务逻辑的分离。Spring使用IoC容器作为构建架构的基础,通过IoC实现组件的装配,降低了各组件之间的依赖,实现了各组件的松耦合,使得各组件可以单独进行开发和测试,这些特性都使得整个应用系统具有良好的可扩展性和可维护性。Hibernate作为一种持久层框架与Spring天然的搭配,把它们整合在一起,使开发人员可以完全以面向对象的方式进行系统分析、系统设计并可以使用面向对象的操作方式操作数据库记录。更为重要的是,应用系统在不同数据库间移植非常方便,只需在配置文件中更改即可。总之三个框架的整合能够充分发挥者在各自领域的优势,通过IoC装配各组件,通过AOP进行事务管理,能够轻松实现一个开发简单、结构良好、功能强大、层次清晰的Web应用系统。 (责任编辑:南粤论文中心)转贴于南粤论文中心: http://www.nylw.net(南粤论文中心__代写代发论文_毕业论文带写_广州职称论文代发_广州论文网)
顶一下
(1)
100%
踩一下
(0)
0%


版权声明:因本文均来自于网络,如果有版权方面侵犯,请及时联系本站删除.