1、需要额外加入的jar包:struts2-spring-plugin-x.x.xx.jar、spring-web-4.3.9.RELEASE.jar、spring-webmvc-4.3.9.RELEASE.jar
注意:struts和Spring的jar包的版本各自要对应好,统一一个版本,不然会无法运行
2、整合作用:使用 IOC 容器来管理 Struts2 的 Action
3、Spring整合struts2步骤:
(1)加入spring和struts2的jar包,并且额外加入上面提到的三个jar包
(2)创建Bean类和Action类
(3)创建Spring配置文件,在Spring的配置文件中配置struts2的action(如:applicationContext.xml中配置productAction)
(4)创建struts2配置文件,在struts2配置文件中配置action节点,其中节点的class指向第二步中配置的action id(如:struts.xml中的action标签)
(5)创建web.xml文件,配置Spring配置文件名称和位置,启动IOC容器的listener,配置Struts2的Filter
(6)创建调用action和显示结果的相关的jsp页面
4、Spring整合Struts2时,在Struts2中配置Spring的Action的class,就需要指向IOC容器中该bean的id(即:applicationContext.xml中的bean的id)
5、在IOC容器中配置Struts2的action的Action时,需要配置scope,因为每个请求都会创建一个action,所以需要该bean是非单例的
6、文件
①Product.java:数据模型
②ProductAction.java:Product的action类,用来获取product的数据
③applicationContext.xml:Spring配置文件
④struts.xml:Struts配置文件
⑤web.xml:web配置文件
⑥index.jsp:测试页面
⑦result.jsp:结果页面
7、Product.java
package com.demo.sshtest.bean;
public class Product {
private Integer id;
private String name;
public Product() {
super();
System.out.println("ProductProductProduct");
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void PrintProduct(){
System.out.println("ID:"+id+"----NAME:"+name);
}
}
8、ProductAction.java
package com.demo.sshtest.action;
import com.demo.sshtest.bean.Product;
public class ProductAction {
private Product product;
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
public String execute(){
System.out.println("ProductAction execute >> id:"+product.getId()+",name:"+product.getName());
return "success";
}
}
9、applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="product" class="com.demo.sshtest.bean.Product">
<property name="id" value="1"></property>
<property name="name" value="name1"></property>
</bean>
<!-- 在IOC容器中配置Struts2的action的Action时,需要配置scope,因为每个请求都会创建一个action,所以需要该bean是非单例的 -->
<!-- 配置数据值用value,配置类对象用ref -->
<bean id="productAction" class="com.demo.sshtest.action.ProductAction" scope="prototype">
<property name="product" ref="product"></property>
</bean>
</beans>
10、struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false"></constant>
<constant name="struts.devMode" value="true" />
<!-- Spring整合Struts2时,在Struts2中配置Spring的Action的class,就需要指向IOC容器中该bean的id(即:applicationContext.xml中的bean的id) -->
<package name="default" namespace="/" extends="struts-default">
<action name="productExecute" class="productAction" method="execute">
<result>/result.jsp</result>
</action>
</package>
</struts>
11、web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<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>
</web-app>
12、index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!--
需要额外加入的jar包:struts2-spring-plugin-x.x.xx.jar、spring-web-4.3.9.RELEASE.jar、spring-webmvc-4.3.9.RELEASE.jar
注意:struts和Spring的jar包的版本各自要对应好,统一一个版本,不然会无法运行
整合作用:使用 IOC 容器来管理 Struts2 的 Action
Spring整合struts2步骤:
(1)加入spring和struts2的jar包,并且额外加入上面提到的三个jar包
(2)创建Bean类和Action类
(3)创建Spring配置文件,在Spring的配置文件中配置struts2的action(如:applicationContext.xml中配置productAction)
(4)创建struts2配置文件,在struts2配置文件中配置action节点,其中节点的class指向第二步中配置的action id(如:struts.xml中的action标签)
(5)创建web.xml文件,配置Spring配置文件名称和位置,启动IOC容器的listener,配置Struts2的Filter
(6)创建调用action和显示结果的相关的jsp页面
-->
<a href="productExecute">productExecute</a>
</body>
</html>
13、result.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page language="java" import="com.demo.sshtest.*" %>
<%@ page language="java" import="java.net.*,java.io.*,java.text.*, java.util.*" %>
<%@ taglib prefix="s" uri="/struts-tags"%>
<% request.setCharacterEncoding("UTF-8"); %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
Id: <s:property value="product.id"/>
<br>
Name: <s:property value="product.name"/>
<br>
<br>
<s:debug></s:debug>
<br>
</body>
</html>
14、注意事项
①IOC容器中配置Struts2的action的Action时,需要配置scope,而且是非单例的,用prototype
②在 web.xml 文件中注册 Spring 提供的 Servlet 监听器, 它会在当前 web 应用被加载时,将 Spring 的 ApplicationContext 保存到 ServletContext 对象中
③Servlet 监听器通过查找 web 应用初始化参数 contextConfigLocation 来获取 Bean 配置文件的位置. 如果有多个 Bean 配置文件, 可以通过逗号或空格进行分隔
④contextConfigLocation 的默认值为 /WEB-INF/applicationContext.xml
15、项目目录
16、demo
https://download.csdn.net/download/qq_22778717/10484668