SSH笔记-Spring整合Struts2

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

猜你喜欢

转载自blog.csdn.net/qq_22778717/article/details/80724393