浅析Struts与Spring的整合

时间:2022-07-04 09:21:11

摘要:本文论述了strutsspring整合的三种方法,并对这三种方法做了做了详细的分析和对比。

关键词:Struts、Spring、整合

一、引言

Struts框架是Apache基金会Jakarta项目组的一个Open Source(开放源代码)项目,该框架由一组相互协作的类(组件)、Servlet以及标签库组成,是对传统MVC设计模式的一种实现和标准化,充分体现了MVC模式“分离显示逻辑和业务逻辑”的设计思想,是目前Java Web开放中广泛采用的技术。

Spring是由Rod Johnson创建的一个开源框架,目的是为了解决Java Web企业应用开发的复杂性。Spring提供了IoC(控制反转)、AOP(面向切面编程)、声明式事务等功能,提高了Java Web应用开发的效率和质量。更重要的是,Spring不排斥各种优秀的开源框架,相反,Spring可以降低各种框架的使用难度,Spring提供了对各种优秀框架(如Struts,Hibernate等)的直接支持。

虽然Spring本身可以作为一个MVC实现,但由于Struts在MVC方面的影响力,使得开发人员者更愿意将Struts整合到Spring中,而不是使用Spring MVC代替Struts。本文总结归纳了整合Struts和Spring的三种方法,并讨论了各自的优缺点。

二、整合struts和spring

1,使用ActionSupport类

(1)原理

当客户端发送http请求到控制器时,使用请求参数填充FormBean,并根据struts-config.xml的配置将请求转发给对应的Action,Action通过调用父类的getWebApplicationContext()方法获取ApplicationContext对象,在通过ApplicationContext对象从Spring容器中获取相关的JavaBean,通过Action处理后将处理结果会发给控制器,控制其根据struts-config,xml的配置将处理结果传回到客户端。

(2)用法

①在struts-config xml中配置插件,代码如下:

②创建A ction类,继承自ActionSupport或DispatchActionSupport;

③在Action中通过调用getWebApplicationcontext()方法获取ApplicationContext对象,然后调用ApplicationContext对象的getBean()方法从Spring容器中取出相应的对象。

(3)评价

这种技术很简单并且易于理解。但是,它将Struts动作与Sp ring框架耦合在一起。如果想替换掉Spring,那么就必须重写代码。同时,由于Struts动作不在Spring的控制之下,所以它不能获得SpringAOP的优势。当使用多重独立的Sp ring环境时,这种技术可能有用,但是在大多数情况下,这种方法不如另外两种方法合适。

2,使用DelegatingRequestProcessor类

(1)原理

客户端发送http请求到控制器ActionServlet,控制器将使用请求参数填充FormBean并根据Struts-config,xml的配置将请求转发给DelegatingResquestProcessor,DelegatingResquestProcessor根据Spring配置文件从web容器中提取ActionBean并调用相关的JavaBean,由ActionBean对请求进行处理,处理完毕后在转发给控制器,控制器再根据struts-config.xml的配置把将处理结果发挥给客户端。

(2)用法

①在struts-config.xml中配置插件,代码如下:

vaIue=”classpath applIcationContext.xmI”/>

②在struts-config.xml中增加如下节点:

DelegatingRequestProcessor”/>

③创建Action,并在spring配置文件ApplicationContext xml中对其进行注册。

(3)评价

这种方法使Struts动作并不知道它正被Spring管理,并且使我们能够利用Spring的动作管理框架的所有优点。由于Struts动作注意不到Spring的存在,所以我们不需要重写我们的Struts代码就可以使用其他控制反转容器来替换掉Spring。看来这种方法的确比第一种方法好,但还是存在着一些问题。如果我们使用一个不同的RequestProcessor,则需要手动整合Spring的DelegatingRequestProcessor。添加的代码会造成维护的麻烦并且将来会降低的应用程序的灵活性。

3,将StrutsAction管理委托给Spring框架

(1)原理

客户端发送http请求到控制器ActionServlet,控制器将使用请求参数填充FormBean,并根据struts-config.xmI的配置将请求转发给DelegatingActionProxy,DelegatingActionProxy根据请求信息从Spring容器中获取相应的Action并由Spring为其注入相关的JavaBean,请求经Action处理完毕后在转发给DelegatingActionProxy,DelegatingActionProxy在转发处理结果给控制器,控制器根据struts-config.xml的配置把将处理结果发挥给客户端。

(2)用法

①在Struts-config.xml中配置插件,代码如下:

value=classpath:applicationContext.xmI/>

②创建Action并将st ruts-config,xml中的Action节点的type更改为org.springframework.web.struts,DeIegatingActionProxy

③在Spring配置文件中注册ActionBean。

(3)评价

动作委托方法是这3种方法中最好的。Struts动作不了解Spring,不对代码作任何改变就可用于非Spring应用程序中。RequestProcessor的改变不会影响它,并且它可以利用SpringAOP特性的优点。

三、结束语

在本文中,主要讨论了Struts动作整合到Spring框架中的3种方法。第1种方法简单而快捷,但是会将Struts动作与Spring框架耦合在一起,当改变框架时需要重写代码。第2种方法通过委托RequestProcessor巧妙地解开代码的耦合,但是它的可扩展性不强。第3种方法是最好的,将Struts动作委托给Spring框架可以使代码解耦,从而使可以在的Struts应用程序中利用Spring的特性。

上一篇:Silicon Labs在人机界面市场的组合拳 下一篇:在医疗系统中USB的电气隔离