集成Spring与Struts

Struts是一个Web层框架,需要考虑如何获得业务逻辑接口。一个较好的设计就是首先设计一个BaseAction,其中定义获得业务逻辑接口的方法,其他所有Action继承了BaseAction,方便地调用业务逻辑接口。

java 代码
 
  1. public class BaseAction extends Action {  
  2.   
  3.     private static final UserService userService = new UserServiceImpl();  
  4.   
  5.     public UserService getUserService() {  
  6.         return userService;  
  7.     }  
  8. }  

这种以静态的方法持有业务逻辑接口的引用的设计并不优雅。
使用Spring的IOC来配置管理这些逻辑组件,则完全可以实现一个优雅的多层应用程序。

在Spring中有两种方法集成Struts


(1)通过一个Spring提供的一个Struts插件来初始化Ioc容器。
xml 代码
 
  1. <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn" >  
  2.   <set-property property="contextConfigLocation"  
  3.      value="/WEB-INF/applicationContext.xml"/>  
  4. plug-in>  
注意:我们要将Spring的配置文件放置在/WEB-INF/目录下,并且如果不是使用Spring的默认命名( applicationContext.xml),
就必须在以上位置添加描述。否则,会出现404错误。在这里,配置文件是使用默认的名称,但我添加了描述。

然后,我们将BaseAction修改,使其继承ActionSupport(org.springframework.web.struts.ActionSupport)。
java 代码
 
  1. public class BaseAction extends ActionSupport {  
  2.       
  3.     public UserService getUserService(){  
  4.         return (UserService)getWebApplicationContext().getBean("userService");  
  5.     }  
  6. }  
ActionSupport是Spring提供的一个继承自Action的抽象类。
它有一个很重要的方法 getWebApplicationContext(),通过该方法,我们可以获得当前的Ioc容器的引用ApplicationContext,一旦获得了该引用,我们就可以获得Spring的IOC容器中的所有的Bean。

此外,我们还要在Spring的配置文件applicationContext.xml中配置bean(userService)
xml 代码
  1. xml version="1.0" encoding="UTF-8"?>  
  2. <beans  
  3.     xmlns="http://www.springframework.org/schema/beans"  
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">  
  6.   
  7. <bean id="userService" class="org.justin.service.impl.UserServiceImpl" />  
  8.   
  9. beans> 

该方法的好处是,只要合理的抽象出一个基类BaseAction,只要修改BaseAction使其继承ActionSupport就可以实现Spring与Struts的集成,而无需修改任何Action。

(2)另一种方法就是就是将Struts中的所有Action都作为SpringIOC容器中的Bean来管理。
通过Spring提供的DelegatingRequestProcessor来替代Struts的默认派发器,以便让Spring能截获派发给Action的请求。
这种方式下,业务逻辑组件通过依赖注入的方式在Spring的Ioc容器中就配置完毕了。

我们往struts-config.xml中添加一条
xml 代码
<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor" /> 

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

Spring提供的Struts PlugIn仍负责启动Spring容器,而
DelegatingRequestProcessor可以让Spring接管请求,
从而将请求派发到Ioc容器管理的Action实例。因此,我们还必须在Spring的配置文件中声明每一个Action类,其name属性
和Struts配置文件中的path要完全一致。

xml 代码
 
<bean name="/login" class="struts.action.LoginAction">        <property name="userService" ref="userService"></property>   </bean>      <bean name="/logout" class="struts.action.LogoutAction">        <property name="userService" ref="userService"></property>   </bean>  

其实在struts-config.xml中我们就不需要在配置action的type属性了。

这种配置最大的不便就是所有的Action必须同时在Struts和Spring中各配置一次。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值