正式整合Spring、Struts2之前,咱们先来聊聊看看它俩框架有哪些差异,差异肯定就是决定解决手段的,所以有必要了解它们俩的差异;

众所周知,Struts2可以看作是MVC设计模式中C角色一个比较好的实现类,当访问某个Action的请求过来后,Struts2的xwork2包中有个ObjectFactory实现类,用来创建Action对象,然后用来处理对应请求和返回响应的逻辑视图名称;同样,Spring的一大特性IOC,主要解决地就是如何创建对象并且给创建的对象装配属性,然后管理对象等,说到这里,问题开始明了起来,既然双方都能创建对象,那么Spring整合Struts2所需要注意的问题都会围绕以下三个方面展开:

1、到底由谁来创建这个Action对象?

2、如果由Spring侧来创建,那么Struts2如何能够承认这个对象?

3、如果由Struts2侧来创建,那么Spring如何来对它进行属性装配?

好的,既然问题清楚了,还需要额外科普一下,Struts2框架里面提供了完善的插件机制,即当你需要某个功能的时候,把对应的Jar包放置到lib下,就具有了相应的功能,当你不需要的时候,不用添加即可;在此需要引入一个新的插件包:struts2-spring-plugin-2.3.29.jar ,从这个名称可以看出这个jar是为Struts2和Spring整合而服务的,一般来说只要是想要整合Struts2和Spring就需要用到这个jar,本次整合采用2.3.29版本的,好的,下面分别从Spring侧和Struts2侧创建Action对象开始整合;

(一)Spring侧创建Action对象

a)将struts2-spring-plugin-2.3.29.jar文件放入Web项目中;

b)新建一个Web项目,项目基本结构如下:

c)由于本次整合采用注解的方式,所以需要给action、service.impl、dao.impl包里面的类名分别添加@Controller,@Service,@Repository注解,然后在WebRoot/conf/applicationContext.xml文件,配置过后如下所示:

package com.ssh.action;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;import com.opensymphony.xwork2.ActionSupport;
import com.ssh.service.LoginService;@Controller("loginAction")
public class LoginAction extends ActionSupport {private String username;private String password;@AutowiredLoginService loginService;@Overridepublic String execute() throws Exception {if(loginService.valid(username,password)){return SUCCESS;}return LOGIN;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public LoginService getLoginService() {return loginService;}public void setLoginService(LoginService loginService) {this.loginService = loginService;}
}package com.ssh.service.impl;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import com.ssh.dao.LoginDao;
import com.ssh.service.LoginService;@Service
public class LoginServiceImpl implements LoginService {@Autowiredprivate LoginDao loginDao;@Overridepublic boolean valid(String username,String password) {loginDao.save();return loginDao.vaild(username, password);}}package com.ssh.dao.impl;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.orm.hibernate4.HibernateTemplate;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;import com.ssh.dao.LoginDao;
import com.ssh.domain.SlCompany;@Repository
public class LoginDaoImpl implements LoginDao {@Autowired@Qualifier("hibernateTemplate")private HibernateTemplate hibernateTemplate;@Override@Transactionalpublic boolean vaild(String username, String password) {// 此处模拟从数据库查询数据if ("hello".equals(username) && "world".equals(password)) {return true;}return false;}}
<!-- 这里基本把Spring用到的所有的验证Schema给列出来,以便大家使用 -->
<?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"xmlns:p="http://www.springframework.org/schema/p" xmlns:util="http://www.springframework.org/schema/util"xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:cache="http://www.springframework.org/schema/cache"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://www.springframework.org/schema/aop  http://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/tx  http://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/util  http://www.springframework.org/schema/util/spring-util.xsdhttp://www.springframework.org/schema/jdbc  http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsdhttp://www.springframework.org/schema/cache  http://www.springframework.org/schema/cache/spring-cache-3.1.xsd "><!-- 配置Spring自动扫描com.ssh包以及子包下面的所有用注解标识的类 --><context:component-scan base-package="com.ssh"/></beans>

好了,到此Spring配置基本结束

d)找到项目的web.xml,添加如下内容,使得Spring容器在服务器启动的时候,开始初始化容器

  <!-- 配置全局变量 --><context-param><param-name>contextConfigLocation</param-name><param-value>conf/applicationContext.xml</param-value></context-param><!-- 在服务器启动的时候初始化Spring容器对象 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>
</pre><pre name="code" class="html" style="font-size:18px; font-family: 'Microsoft YaHei';"><!-- 通过下述过滤器使得Struts2框架接管所用的请求处理 -->
<!-- 通过下述过滤器使得Struts2框架接管所用的请求处理 --><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>

e)找到类路径下面的struts.xml文件,添加如下片段,记住:action标签的class属性是一个伪类,这里的值与@Controller括号里面的内容一致

<struts><constant name="struts.i18n.encoding" value="UTF-8"/><constant name="struts.devMode" value="true"/><constant name="struts.objectFactory" value="spring"/><package name="default" extends="struts-default"><action name="doLogin" class="loginAction"></action></package>
</struts>
<span style="font-family:Microsoft YaHei;font-size:18px;">好了,第一种由Spring侧产生Action对象的方法到此结束,需要注意红字部分内容就可以,结果在这里就不演示了;</span>
<span style="font-family:Microsoft YaHei;font-size:18px;">
</span>
<span style="font-family:Microsoft YaHei;font-size:18px;">(二)开始介绍Struts2侧的创建Action对象方法,这种方式相比于上述方法要简单很多,不需要让Spring容器管理创建Action对象,充分利用Struts2-Spring-Plugin插件自动创建初始化Action对象,如图:</span>

此时Struts2里面的Action配置跟以前没有整合Spring配置那样,不做任何改变,业务类在Spring容器中配置,注意:此种配置方式Action类对象是由 Struts2-Spring-Plugin插件创建的,同时该插件还会使用bean的自动装配将由Spring容器产生的业务类对象注入进来。

可以在struts2-core.jar包的default.properties文件里面找到关于Spring整合的如下配置:

同时在struts2-spring-plugin.jar包的struts-plugin.xml

会发现原来将struts.objectFactory设置为spring值得是将Struts2创建Action对象的权利交接给了struts2-spring-plugin插件来创建管理,所以一切由struts2-spring-plugin插件来创建Action对象,并协调Spring容器,注入业务Bean等操作!

综合上述两种整合方式,不难发现整合的关键在于处理Spring和Struts2的矛盾点,且struts2-spring-plugin在其中起到了解决矛盾的作用,下篇博客会讲述如何整合Spring和Hibernate,以及一些事务管理等相关知识!

Spring、Struts整合相关推荐

  1. 小结spring和struts整合的三类方式

    小结spring和struts整合的三类方式 整合spring和hibernate的三种方式,小结之. 1) 在struts中使用webapplicationcontext调用spring     声 ...

  2. spring+hibernate+struts整合(1)

    spring+hibernate:整合 步骤1:引入类包 如下图:这里是所有的类包,为后面的struts整合考虑 步骤2:修改web.xml 在web.xml中加入下面的配置 <context- ...

  3. struts2+hibernate-jpa+Spring+maven 整合(1)

    1.0.0 struts2 与 spring 的整合. 1.1.0 新建maven工程 , 编写pom.xml ,这里只需要简单的添加 一个组件就够了: 在myeclipse 生成的pom.xml 添 ...

  4. Struts 整合 SpringMVC

    Struts 整合 SpringMVC 过程:这篇文章是我在整合过程中所做的记录和笔记 web.xml :筛选器机制过滤 原机制是拦截了所有 url ,即 <url-pattern>/*& ...

  5. flex3+blazeds+spring+hibernate整合小结

    近来flex盛行,因此这两天也借了本书看了两天,发觉作为非页面设计人员,flex 还是很好的,flex builder很好用,拖拉就 有很COOL的界面了,而且flex总的来说基本东西不难学,有编程基 ...

  6. Java框架搭建-Maven、Mybatis、Spring MVC整合搭建

    Java框架搭建-Maven.Mybatis.Spring MVC整合搭建 1. 下载eclipse 到网站下载 http://www.eclipse.org/downloads/packages/e ...

  7. Spring Boot整合Shiro + JSP教程(用户认证,权限管理,图片验证码)

    在此首先感谢**编程不良人**up主提供的视频教程 代码都是跟着up的视频敲的,遇到的一些问题也是通过CSDN博主提供的教程解决的,在此也感谢那些提供bug解决方案的前辈们~ 项目完整代码已经发布到g ...

  8. Spring、Mybatis、Spring MVC整合实例

    Spring.Mybatis.Spring MVC整合实例笔记 源码地址:https://gitee.com/name168/SSM_Demo 1.Maven web项目创建(IDEA) 2.SSM整 ...

  9. 基于Spring+Struts+Hibernate实现的健康管理平台

    源码及论文下载:http://www.byamd.xyz/tag/java/ 摘要 随着网络技术的不断发展,网站的开发与运用变得更加广泛.这次采用java语言SSH框架(Spring,Struts,H ...

  10. spring boot整合spring security笔记

    最近自己做了一个小项目,正在进行springboot和spring Security的整合,有一丢丢的感悟,在这里分享一下: 首先,spring boot整合spring security最好是使用T ...

最新文章

  1. 多节点CDN缓存加速系统wdcdn2.4版本发布(20111213)
  2. JAVA增删改查XML文件
  3. 医院数据中心机房建设资料汇总(31篇)
  4. 利用人工智能众包数据,加速药物发现
  5. 微服务架构如何保障双11狂欢下的99.99%高可用?
  6. node+ejs模板引擎的应用
  7. TensorFlow example示例 Process finished with exit code -1073741819 (0xC0000005)
  8. 必背42个单词_高中英语必背100个常考单词,考试必考
  9. idea 注解报错_SpringBoot 遗忘后的简单快速回忆之环境搭建与常见注解
  10. 斐讯路由刷华硕固件后指示灯颜色修改
  11. 微信小程序轮播图(详细)
  12. 讯飞tts语音引擎_讯飞iFLYOS语音让家居产品更智能
  13. 计算机初始化,怎么初始化电脑 电脑要如何初始化教程
  14. PayPal支付功能实现
  15. 阿里云ECS云服务器--安装部署MySQL(图文)
  16. 正版 Windows 10安装教程
  17. Unity3D 如何干净的解除父子关系
  18. 再先进的在线教学,也要回归这个本质
  19. 三星手机直连电脑Samsung Flow
  20. BOSSGOO平台免费使用

热门文章

  1. [Groovy] How to check if element in groovy array/hash/collection/list?
  2. 糍粑大叔的独游之旅-战斗!之弹道实现(上)
  3. PHP中fwrite与file_put_contents性能测试
  4. 【笔记】C++自学笔记系列02:类的组合与类的友元
  5. EntityFramework 4.1 如何加入项目
  6. CIO应用商业智能技术系统的重构思考
  7. 有关javaScript面向对象和原型笔记
  8. JavaScript算法(实例四)分解质因数 / 四舍五入 / 阶乘之和
  9. php的开始和结束标记建议使用的是,php的开始和结束标记建议使用的是?
  10. 计算机论文写作提纲怎么写,信息技术论文提纲写作示例