spring:负责对象的创建;
struts:负责用 action 处理用户的请求;
那么,spring 和 struts 整合的关键点就是:
让 struts 中 action 对象的创建,交给 spring 完成。
spring 和 struts 整合步骤:
1、引入相关 jar 包:
struts 相关 jar 包;
spring-core:spring 核心 包;
spring-web:spring 对 web 模块支持的包;
spring-web-4.3.7.RELEASE.jar:spring 对 web 支持的包
struts2-spring-plugin-2.3.4.jar:spring 和 struts 整合的包
2、配置 web.xml:配置 struts 核心过滤器,以及初始化 spring 的 IOC 容器;
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- 1、配置 struts 核心过滤器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 2、初始化 spring 的 IOC 容器:加载 spring 配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:bean.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
3、创建 dao、service、action:
UserDao.java:
package com.example.demo;
public class UserDao {
public void save(){
System.out.println("保存数据");
}
}
UserService.java:
package com.example.demo;
public class UserService {
// IOC 容器注入
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void save(){
userDao.save();
}
}
UserAction.java:
package com.example.demo;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
// IOC 容器注入
private UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
public String save(){
userService.save();
return SUCCESS;
}
}
4、配置 bean.xml:创建对象,依赖注入
<?xml version="1.0" encoding="UTF-8"?>
<!--suppress ALL -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 创建 UserDao 对象 -->
<bean id="userDao" class="com.example.demo.UserDao"/>
<!-- 创建 UserService 对象 -->
<bean id="userService" class="com.example.demo.UserService">
<!-- 注入 userDao 对象 -->
<property name="userDao" ref="userDao"/>
</bean>
<!-- 创建 UserAction 对象 -->
<bean id="userAction" class="com.example.demo.UserAction">
<!-- 注入 userService 对象 -->
<property name="userService" ref="userService"/>
</bean>
</beans>
5、配置 struts.xml:从 IOC 容器中获取 action 对象
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="demo" extends="struts-default">
<!-- struts 自己创建 userAction 对象 -->
<!--<action name="userAction" class="com.example.demo.UserAction" method="save">-->
<!-- 直接从 IOC 容器中获取 userAction 对象 -->
<action name="userAction" class="userAction" method="save">
<result name="success">/index.jsp</result>
</action>
</package>
</struts>
项目结构: