一、Spring与Struts框架整合
Spring负责对象创建,Struts负责用Action处理请求;因此,两种框架的整合效果是让Spring框架负责创建Struts框架的Action对象
二、Spring与Struts框架整合HelloWorld
1. 引入jar文件
struts框架:
commons-fileupload-1.2.2.jar
commons-io-2.0.1.jar
commons-lang3-3.1.jar
freemarker-2.3.19.jar
javassist-3.11.0.GA.jar
ognl-3.0.5.jar
struts2-core-2.3.4.1.jar
xwork-core-2.3.4.1.jar
spring框架:
commons-logging-1.1.3.jar
spring-beans-3.2.5.RELEASE.jar
spring-context-3.2.5.RELEASE.jar
spring-core-3.2.5.RELEASE.jar
spring-expression-3.2.5.RELEASE.jar
spring-web:
spring-web-3.2.5.RELEASE.jar
struts2-spring-plugin-2.3.4.1.jar
2. 配置文件
1) web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- struts核心过滤器 -->
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- spring监听器配置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<!-- src文件下的非java文件(java文件会被编译为class文件)放入WEB-INF/classes目录下 -->
<param-value>/WEB-INF/classes/bean*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
配置struts核心监听器和spring容器初始化以及servletContextListener
2) bean.xml
bean-dao.xml:
<bean id="userDao" class="com.cityu.dao.UserDao"></bean>
bean-service.xml:
<bean id="userService" class="com.cityu.service.UserService">
<property name="userDao" ref="userDao"></property>
</bean>
bean-action.xml
<bean id="userAction" class="com.cityu.action.UserAction">
<property name="userService" ref="userService"></property>
</bean>
3) struts.xml
<struts>
<package name="user" extends="struts-default">
<!-- action需要由spring来创建,因此class应该指定为userAction bean对象,
这样会去是spring的IOC容器中会寻找该对象 -->
<action name="user" class="userAction" method="execute">
<result name = "success">/index.jsp</result>
</action>
</package>
</struts>
这里需要注意,之前是在用户访问时由struts创建对象,这里我们有了spring,可以将创建对象userAction的工作交给spring
3. java实现
public class UserDao {
public void save(){
System.out.println("save into DataBase!");
}
}
public class UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void service(){
userDao.save();
}
}
public class UserAction extends ActionSupport{
private UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
public String execute(){
userService.service();
return SUCCESS;
}
}
简单的流程是这样的:用户请求时,访问action,action对象由spring容器创建;在action访问到dao的过程中,所需要的依赖对象都是由spring创建的,执行完业务方法后,由action的返回值定位到index.jsp页面,和用户交互。当然,其中struts框架的过滤作用暂时没有很多体现,因为使用的都是默认的拦截器。