struts整合Spring(2种方法)

 第一种整合方式

1.Struts配置文件中增加一个Spring插件配置,其它配置不变。这个插件的作用是web服务器启动时即创建ApplicationContext上下文实例,并将其加载到ServletContext实例(即jsp的内置对象application)中。

2.用户Action不再从struts框架的Action基类继承,而从Spring提供的Action基类继承,这个类是org.springframework.web.struts.ActionSupport,这个类不仅提供了Struts Action 所有功能,而且提供了获取ApplicationContext上下文实例的方法,我们所需要的业务对象即从ApplicationContext实例获得。

3.其它方面与在struts下开发一样。

弊端(现在我们发现在第一种整合方式中,我们的Action类直接使用Spring特定的类ActionSupport,显然这使action代码与Spring紧密耦合,另外,action类也负责查找由

Spring管理的Bean,这违背了反向控制(IoC)的原则。

第二种整合方式:

1.现在介绍Spring提供的第二种与Struts集成的方式。在这种方式下,我们的Action仍然继承的是Struts提供的Action基类,业务对象(bean)以成员属性的方式定义,并提供相应的set方法,使用SpringIoC方式将业务对象注入到Action中,从而不需要通过编码在应用上下文中查找.

2.实现原理:我们知道struts的中央控制器是ActionServlet类,所有请求都经由这个类进行协调控制,而在这个类的内部是将控制任务通过调用另外一个类RequestProcesser而实现的,同时struts还允许用户继承RequestProcesser ,重写自己的控制实现,并在配置文件中指定通过那个RequestProcesser实现控制。Spring正是利用了这一原理,提供了自己的RequestProcesser,这个类会将会根据SpringAction配置文件实现Action的实例化、业务对象的注入,访问地址到Action的映射。

第二种整合方式的实现步骤

1.struts配置文件中增加上下文插件配置(与第一种方式相同)

2.struts配置文件中增加RequestProcesser配置:

<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor">

</controller>

3.Spring配置文件中将Action做为bean进行配置:

<bean name="/doAddPerson" class="ibmsoft.action.DoAddPersonAction">

  <property name="service"><ref bean="service"/></property>

</bean>

值得注意的是:abean的配置中没有使用id属性,而是使用name属性,其原因是id属性的值不允许出现“/”,因此使用name属性,二者的作用是一样的。bbean的名字是Action的映射地址名。

4.其它方面不用变,一切OK

你可能感兴趣的:(struts整合Spring(2种方法))