Spring+Struts集成(第二种方案)

在上一篇文章中我们了解到了第一种Spring跟Struts集成的方案,但此集成方案的不足是WEB层中知道Spring的相关内容,因为需要去主动的查找对象:BeanFactory.方案二便是通过依赖注入的方式来进行.通过Spring提供ActionProxy进行代理.去获取BeanFactory,找到Path的名称,然后找到path路径下的Action,然后完成注入.

方案二的核心:Struts的核心交给Spring来创建.Spring跟其他框架集合主要也是通过此种方式.

方案二集成框架图:

spring+struts(第二种方案)

集成原理:将业务逻辑对象(Struts的Action)交给Spring进行创建.创建之后业务逻辑对象就会被注入.这样就不会有依赖查找.

1 spring 和struts依赖包配置.

*struts

--拷贝struts相关java包和jstl.

--在web.xml中配置ActionServlet.

--提供struts-config.xml核心配置文件.

--提供struts国际化资源文件,最好提供默认国际化文件.

*spring

--拷贝spring相关java包

*SPRING_HOME/dist/spring.jar

*SPRING_HOME/lib/log4j/log4j-1.2.14.jar

*SPRING_HOME/lib/jakarta-commons/commons-logging.jar

*SPRING_HOME/lib/aspectj/aspectjrt.jar

*SPRING_HOME/lib/aspectj/aspectjweaver.jar

--提供spring配置文件.

2 在web.xml文件中配置ContextLoaderListener,让WebServer启动的时候将BeanFactory放在ServletContext中

代码如下:

[html] view plaincopyprint?

  1. <!-- 找到文件名 -->
  2. <context-param>
  3. <!-- 此处的名字是固定死的,在ContextLoader里中的一个常量 -->
  4. <param-name>contextConfigLocation</param-name>
  5. <param-value>classpath:applicationContext-*.xml</param-value>
  6. </context-param>
  7. <!-- 设置Listener,一次性创建BeanFactory -->
  8. <listener>
  9. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  10. </listener>

3 struts-config.xml文件中的<action>标签的type属性需要更改为Spring的代理Action类:org.springframework.web.struts.DelegatingActionProxy

代理Action的作用:取得BeanFactory,然后在IoC容器中将本次请求的Action取出来,随后依赖对象会被注入.

4 将Action交给Spring创建,必须配置业务逻辑对象,注入给Action

[html] view plaincopyprint?

  1. <bean
  2. name="/login"
  3. class="com.tgb.struts.usermgr.web.actions.LoginAction"  scope="prototype">
  4. <property name="userManager" ref="userManager"> </property>
  5. </bean>

在配置业务逻辑对象的时候需要注意一下细节:

1 必须使用name属性,而且name属性的值必须和struts-config.xml文件中的action标签的path属性值一致.

2 建议将scope="prototype"这样struts的Action是线程安全的.

总结:

以上便是Spring跟Struts集成方案2 ,通过两种方案进行对比可以看到.第二种方案将BeanFactory纳入Spring管理,这样WEB层就不需要去主动查找对象,而是通过Spring的依赖注入获得对象.

时间: 2024-10-03 23:28:52

Spring+Struts集成(第二种方案)的相关文章

Struts1.X与Spring集成——第二种方案

上篇博客介绍了Struts1.X与Spring集成的一种方案.Struts1.X与Spring集成--第一种方案 此篇博客还以上篇博客的登录例子为例,介绍Struts1.X与Spring集成的另一种方案. 1,第一种方案 原理 回忆第一种方案集成原理:在Action中取得BeanFactory,通过BeanFactory取得业务逻辑对象 此种方案的缺点:从严格意义的分层上来看,Action上看到了Spring的相关东西,依赖Spring API去查找东西,发生了依赖查找,因为要查找依赖对象,所以

Struts1.X与Spring集成——第一种方案

spring+struts(第一种方案) 集成原理:在Action中取得BeanFactory,通过BeanFactory取得业务逻辑对象,调用业务逻辑方法. 一,新建一个项目Spring_Struts_01 二,步骤 1.spring和Struts的依赖包配置 *Struts (1)拷贝Struts和jstl的依赖包 (2)在web.xml文件中配置ActionServlet <span style="font-family:KaiTi_GB2312;font-size:18px;&qu

Spring+Struts集成(方案一)

SSH框架是现在非常流行的框架之一,本文接下来主要来对Spring和Struts的集成进行展示. 集成原理:在Action中取得BeanFactory,通过BeanFactory取得业务逻辑对象. 集成框架图如下: 1 spring 和struts依赖包配置. *struts --拷贝struts相关java包和jstl. --在web.xml中配置ActionServlet. --提供struts-config.xml核心配置文件. --提供struts国际化资源文件,最好提供默认国际化文件.

自定义tabBar详解第二种方案

自定义tabBar能够解决自定义图片无法显示(只显示一块颜色)这个弊端,自定义tabBar要继承UITabBarController 原图片: (1),  (2), (3),  (4), (5) 下面是自定义了一个TabBar ,每个按钮可以显示图片(自定义避免了图片无法显示只显示一块颜色) 效果图: 代码实现: 一, 首先创建一个继承UIButton的类CustomTabBar, 在.h文件中: //指定协议是为了实现点击button显示相应地页面,像系统的tabBar一样 @protocol

Quartz与Spring的集成

一.Quartz简介 Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序.Jobs可以做成标准的Java组件或 EJBs.Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制.Quartz 允许开发人员根据时间间隔(或天)来调度作业.它实现了作业和触发器的多对多关系,

HBase存储时间相关多列数据的两种方案

所谓“时间相关多列数据”指的是同一个Key下具有多个属性数据,并且这些数据与时间具有相关性,多数场景是该Key对应在不同时间时刻的行为数据.在实际应用中,这类数据很多,例如电子商务网站上用户最近一段时间浏览的宝贝集合.访问的URL列表等. 使用HBase存储此类数据时,有以下两种常用的方案: 多行单列 表结构设计 Row Key:用户标识ID + (Long.MAX_VALUE - timestamp) Column Family:’cf’ Column Qualifier:’’ Value:宝

[java代码库]-简易计算器(第二种)

第二种方案:在程序中不使用if/switch……case等语句,完成计算器功能. <html> <head> <title>简易计算器</title> <script language="javascript">//易错:不是"text/javascript" function doCal(){ var value1=parseInt(document.getElementById("value1

【Win 10 应用开发】文件读写的三种方案

本文老周就跟伙伴们探讨一下关于文件读写的方法.总得来说嘛,有三种方案可以用,而且每种方案都各有特色,也说不上哪种较好.反正你得记住老祖宗留给我们的大智慧——事无定法,灵活运用者为上. OK,咱们开始吧. 先说第一个方案:使用 FileIO类. 这个类属于RT库API,它公开了一堆静态方法,可以直接调用,快捷方便,就像.net里面的File类一样.在使用FileIo类的时候,需要一个引用已知文件的StorageFile实例,而且FileIo只能操作已经存在的文件,它不会自动创建文件,这一点要注意.

Linux下实现秒级定时任务的两种方案(crontab 每秒运行)

第一种方案,当然是写一个后台运行的脚本一直循环,然后每次循环sleep一段时间. while true ;do command sleep XX //间隔秒数 done 第二种方案,使用crontab. 我们都知道crontab的粒度最小是到分钟,但是我们还是可以通过变通的方法做到隔多少秒运行一次. 以下方法将每20秒执行一次 crontab -e * * * * * /bin/date * * * * * sleep 20; /bin/date * * * * * sleep 40; /bin