Spring整合Struts的目的
Spring是一个IOC框架(或者说是一个ioc容器)。Ioc的思想是实现组件之间的解耦。在web程序中如果使用Struts2作为mvc框架,那么怎么实现action和业务层的解耦呢?这就是spring整合Struts2的目的所在。
步骤:
1.导入必要的类库
要使用Spring整合Struts2框架,除了需要导入Spring和Struts2框架必要的类库外,还必须导入支持整合的特定类库。
(1)导入Spring框架的必要及特定类库。
Spring 3.0 web libaralies
(2)导入Struts2框架必要及特定的类库。
Struts2 spring libraries
2.配置web.xml文件。
(1)配置一个StrutsPrepareAndExecuteFilter过滤器。(通过myeclipse添加Struts2特性的时候可以自动生成)
(2)配置一个listener来完成加载Spring配置文件的功能。
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
(3)通过context-param指定特定的配置文件。
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
3.修改Struts2框架的Action类
使用Spring整合Struts2框架的目的就是将Struts2的Action实例交给Spring框架的IOC容器进行管理。使Action和具体的业务实现类解耦。
在action中声明私有属性并且提供setter和getter方法
private UserBiz userBiz;
setter getter方法省略
4.修改struts.xml文件:
Spring框架整合Struts2框架后,Struts2的Action将在IOC容器中被实例化及装配。为了让Strut2框架“知晓”这一信息,需要在struts.properties文件中配置Struts2的常量。
<constant name="struts.objectFactory" value="spring"></constant>
注意,如果使用Spring整合Struts2,那么struts.xml文件中的<action>元素的类型已经不再是该Action对应的实际类型,而只要是合法的标记符即可,将于applicationContext.xml中的Action的bean的id对应。
推荐struts.xml文件中的class不使用完整的类名,而仅使用去掉包名的类名。这并不是规范,是大多数开发人员的习惯,以此提高可读性。
5.修改applicationContext.xml文件:
Spring整合struts2后,struts2的Action实例必须使用Spring框架的IOC容器进行实例化和装配。
注意:strut2的Action类必须制定scope=”prototype”,因为Action类通过实例封装了请求参数的其他属性,如果不指定scope=”prototype”,则默认为单例范围,那么将出现多个请求只实例化一个Action实例的情况,这将引起混乱。