Spring整合Struts2框架的第二种方式(Action由Spring框架来创建)(推荐大家来使用的)
1. spring整合struts的基本操作见我的博文:https://www.cnblogs.com/wyhluckdog/p/10140588.html,这里面将spring与struts2框架整合起来,并且实现了action获取service,说明spring与struts2框架已经建立联系,互通了,但是这种使用web工厂的方式太麻烦了,在开发中并不会使用这种方法,所以我就要介绍spring整合struts2框架的另外一种方法。目前有两种方法,现在介绍第二种方式,第一种方式见我的上一篇博文:https://www.cnblogs.com/wyhluckdog/p/10143918.html。
2. 把具体的Action类配置文件applicatonContext.xml的配置文件中,但是注意:struts.xml需要做修改:
我们需要在applicationContext.xml中定义action,action由spring来进行管理,在原有配置applicationContext.xml中添加下面这组语句:
<!-- 将action由spring来管理 -->
<!-- 通过scope设置来设置action为多例 -->
<bean id="customerAction" class="com.huida.web.CustomerAction" scope="prototype">
<!-- 必须手动注入service属性 -->
<property name="customerService" ref="customerService"></property>
</bean>
完整的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"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
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
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd"> <bean id="customerService" class="com.huida.service.CustomerServiceImpl"> </bean> <!--
需要主要的两点:
1.struts.xml对应的action标签中的class属性填充的是spring中applicationContext.xml中对应Bean的Id
2.一定要给我们的action配置多例
-->
<!-- 将action由spring来管理 -->
<!-- 通过scope设置来设置action为多例 -->
<bean id="customerAction" class="com.huida.web.CustomerAction" scope="prototype">
<!-- 必须手动注入service属性 -->
<property name="customerService" ref="customerService"></property>
</bean> </beans>
3. 更改完applicationContext.xml后,由于我们在这里面定义了Action,所以我们在struts.xml中定义action的时候,在action标签中的class属性不用写全路径了,而填充的是spring中applicationContext.xml中对应Bean的Id。更改后的配置内容为:
<?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>
<package name="crm" namespace="/" extends="struts-default">
<!-- action的全路径写在applicationContext.xml中 -->
<action name="customer_*" class="customerAction" method="{1}">
<result name=""></result>
</action>
</package>
</struts>
4. 我们的Service同样使用上一篇博文的方式来进行获取,在Action中使用数据封装的方式进行获取,所以我们只需要在CustomerAction中定义CustomerService对象,然后定义其Set方法即可:
package com.huida.web; import org.apache.struts2.ServletActionContext;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils; import com.huida.domain.Customer;
import com.huida.service.CustomerService;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven; public class CustomerAction extends ActionSupport implements ModelDriven<Customer>{ //手动实例化对象
//private Customer customer=new Customer(); private CustomerService customerService;
public void setCustomerService(CustomerService customerService) {
this.customerService = customerService;
} /*
* 保存客户的方法
*/
public String save(){
System.out.println("Action中执行了save方法");
customerService.save();
return NONE;
} @Override
public Customer getModel() { return null;
}
}
5. 我们可以验证一下struts与spring整合是否成功。
启动服务器-->在浏览器中输入http://localhost:8080/ssh1-->在页面中点击客户管理-->新增客户-->点击保存按钮。在控制台上输出如下内容:

通过以上步骤我们便将struts与spring通过传统的方法整合起来了。
6.第二种方式需要有几个注意的地方:
(1)struts.xml对应的action标签中的class属性填充的是spring中applicationContext.xml中对应Bean的Id
(2)pring框架默认生成CustomerAction是单例的,而Struts2框架是多例的。所以需要配置 scope="prototype"
(3)CustomerService现在必须自己手动注入了。
Spring整合Struts2框架的第二种方式(Action由Spring框架来创建)(推荐大家来使用的)的更多相关文章
- Spring整合Struts2框架的第一种方式(Action由Struts2框架来创建)。在我的上一篇博文中介绍的通过web工厂的方式获取servcie的方法因为太麻烦,所以开发的时候不会使用。
1. spring整合struts的基本操作见我的上一篇博文:https://www.cnblogs.com/wyhluckdog/p/10140588.html,这里面将spring与struts2 ...
- 一 SSH整合:Spring整合Struts2的两种方式,struts.xml管理Action&Bean管理Action
SSH回顾 1 引入jar包 Struts2的jar包 D:\Struts2\struts-2.3.35\apps\struts2-blank\WEB-INF\lib 开发基本包 Struts2有一 ...
- Spring框架学习(5)spring整合struts2
内容源自:spring整合struts2 一.spring框架对struts等表现层框架的整合原理 : 使用spring的ioc容器管理struts中用于处理请求的Action 将Action配置成i ...
- Spring集成Quartz框架的两种方式。
可参考:https://blog.csdn.net/yk614294861/article/details/84324603 1.使用Spring与Quarta配置作业得两种方式: a.方式一,Met ...
- Spring中bean实例化的三种方式
之前我已经有好几篇博客介绍Spring框架了,不过当时我们都是使用注解来完成注入的,具体小伙伴可以参考这几篇博客(Spring&SpringMVC框架案例).那么今天我想来说说如何通过xml配 ...
- Spring整合Struts2的方法
一.基本支持 通常我们整合Spring和struts2的目的是让Spring来管理struts2的控制器.也就是说把Action交由Spring来管理,利用IOC的特性把Action注入到业务逻辑中. ...
- 【转】Spring学习---Bean配置的三种方式(XML、注解、Java类)介绍与对比
[原文]https://www.toutiao.com/i6594205115605844493/ Spring学习Bean配置的三种方式(XML.注解.Java类)介绍与对比 本文将详细介绍Spri ...
- Spring管理连接池的几种方式
第一种方式:.Spring常规的数据库连接方法: @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations=&qu ...
- 【websocket】spring boot 集成 websocket 的四种方式
集成 websocket 的四种方案 1. 原生注解 pom.xml <dependency> <groupId>org.springframework.boot</gr ...
随机推荐
- Linux进程与线程概述
进程与线程 实现方式的区别:进程是资源分配的基本单位,线程是调度的基本单位. 为什么对于大多数合作性任务,多线程比多个独立的进程更优越呢?这是因为,线程共享相同的内存空间.不同的线程可以存取内存中的同 ...
- webpack(3)--Output
Output output配置如何输出最终想要的代码,output是一个object里面包含一系列配置. 1. filename output.filename配置输出文件的名称,为string类型, ...
- 外观设计模式 (Facade)
目的:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使 外观设计模式使用场合: 1. 在设计初期阶段,应该有意识的将不同的两个分层.层与层之间建立外观 ...
- js数组的初始化
方法一: var myarray = new Array(66,80,90,77,59); 方法二: var myarray = [66,80,90,77,59]; 方法三: var myarray= ...
- C#中的Attribute详解(下)
原文地址:https://blog.csdn.net/xiaouncle/article/details/70229119 C#中的Attribute详解(下) 一.Attribute本质 从上篇里我 ...
- 关于pthreads的使用
产品想实现PHP端的多线程下载 百度了下找到了一个方法,通常需要开启PHP线程安全策略,就是 编译安装的时候 --enable-maintainer-zts 然后安装pthreads扩展, 但是pt ...
- 转发 DDoS攻防战 (一) : 概述
岁寒 然后知松柏之后凋也 岁寒 然后知松柏之后凋也 ——论语·子罕 (此图摘自<Web脚本攻击与防御技术核心剖析>一书,作者:郝永清先生) DDoS,即 Distributed ...
- 10.Action中的method属性
转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 在struts1.x中我们知道通过继承DispatchAction可以实现把 ...
- UI5-文档-4.15-Nested Views
我们的面板内容变得越来越复杂,现在是时候将面板内容移动到一个单独的视图中了.使用这种方法,应用程序结构更容易理解,应用程序的各个部分可以重用. Preview The panel content is ...
- MVC中数据传递 ViewBag的使用
ViewBag MVC3中 ViewBag.ViewData和TempData的使用和差别 在MVC3開始.视图数据能够通过ViewBag属性訪问.在MVC2中则是使用ViewData.MVC3中保留 ...