Spring集成struts(3)

MyEclipse7.0中Struts2、Spring2.0与Hibernate3.2集成配置手册 Struts2框架是基于MVC设计模式的一种实现,它允许开发者将应用程序的业务逻辑、表示层和数据持久层分离。与传统Struts框架相比,Struts2采用拦截器(Interceptor)机制进行请求处理,这使得框架具有更好的灵活性和可扩展性。从架构上来看,Struts2包含以下几个核心组件:核心控制器(FilterDispatcher或StrutsPrepareAndExecuteFilter):它负责接收所有的用户请求,并将它们分发给相应的Action。Action。 阅读详情

3. 将动作管理委托给 Spring

  一个更好的解决方法是将 Strut 动作管理委托给 Spring。您可以通过在 struts-config 动作映射中注册一个代理来实现。代理负责在 Spring 环境中查找 Struts 动作。由于动作在 Spring 的控制之下,所以它可以填充动作的 JavaBean 属性,并为应用诸如 Spring 的 AOP 拦截器之类的特性带来了可能。

  清单 5 中的 Action 类与清单 4 中的相同。但是 struts-config 有一些不同:

  清单 5. Spring 整合的委托方法

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
          "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">

<struts-config>
 <form-beans>
    <form-bean name="searchForm"
      type="org.apache.struts.validator.DynaValidatorForm">
               <form-property name="isbn"    type="java.lang.String"/>
    </form-bean>
 
  </form-beans>

 <global-forwards type="org.apache.struts.action.ActionForward">
     <forward   name="welcome"                path="/welcome.do"/>
     <forward   name="searchEntry"            path="/searchEntry.do"/>
     <forward   name="searchSubmit"           path="/searchSubmit.do"/>
 </global-forwards>

 <action-mappings>
    <action    path="/welcome" forward="/WEB-INF/pages/welcome.htm"/>
    <action    path="/searchEntry" forward="/WEB-INF/pages/search.jsp"/>
    <action    path="/searchSubmit"
             type="org.springframework.web.struts.DelegatingActionProxy" |(1)
             input="/searchEntry.do"
             validate="true"
             name="searchForm">
             <forward name="success" path="/WEB-INF/pages/detail.jsp"/>
             <forward name="failure" path="/WEB-INF/pages/search.jsp"/>
    </action> 

 </action-mappings>

 <message-resources parameter="ApplicationResources"/>

 <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
    <set-property
    property="pathnames"
    value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
 </plug-in>

 <plug-in
    className="org.springframework.web.struts.ContextLoaderPlugIn">
    <set-property property="contextConfigLocation" value="/WEB-INF/beans.xml"/>
 </plug-in>

</struts-config>

  清单 5 是一个典型的 struts-config.xml 文件,只有一个小小的差别。它注册 Spring 代理类的名称,而不是声明动作的类名,如(1)处所示。DelegatingActionProxy 类使用动作映射名称查找 Spring 环境中的动作。这就是我们使用 ContextLoaderPlugIn 声明的环境

将一个 Struts 动作注册为一个 Spring bean 是非常直观的,如清单 6 所示。我利用动作映射使用 标记的名称属性(在这个例子中是 "/searchSubmit")简单地创建了一个 bean。这个动作的 JavaBean 属性像任何 Spring bean 一样被填充:

  清单 6. 在 Spring 环境中注册一个 Struts 动作

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
 "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
  <bean id="bookService" class="ca.nexcel.books.business.BookServiceImpl"/>

  <bean name="/searchSubmit"  
        class="ca.nexcel.books.actions.SearchSubmit">
     <property name="bookService">
        <ref bean="bookService"/>
     </property>
  </bean>

</beans>

  动作委托的优点

  动作委托解决方法是这三种方法中最好的。Struts 动作不了解 Spring,不对代码作任何改变就可用于非 Spring 应用程序中。RequestProcessor 的改变不会影响它,并且它可以利用 Spring AOP 特性的优点。

  动作委托的优点不止如此。一旦让 Spring 控制您的 Struts 动作,您就可以使用 Spring 给动作补充更强的活力。例如,没有 Spring 的话,所有的 Struts 动作都必须是线程安全的。如果您设置 标记的 singleton 属性为“false”,那么不管用何种方法,您的应用程序都将在每一个请求上有一个新生成的动作对象。您可能不需要这种特性,但是把它放在您的工具箱中也很好。您也可以利用 Spring 的生命周期方法。例如,当实例化 Struts 动作时, 标记的 init-method 属性被用于运行一个方法。类似地,在从容器中删除 bean 之前,destroy-method 属性执行一个方法。这些方法是管理昂贵对象的好办法,它们以一种与 Servlet 生命周期相同的方式进行管理。

  拦截 Struts

  前面提到过,通过将 Struts 动作委托给 Spring 框架而整合 Struts 和 Spring 的一个主要的优点是:您可以将 Spring 的 AOP 拦截器应用于您的 Struts 动作。通过将 Spring 拦截器应用于 Struts 动作,您可以用最小的代价处理横切关注点。

  虽然 Spring 提供很多内置拦截器,但是我将向您展示如何创建自己的拦截器并把它应用于一个 Struts 动作。为了使用拦截器,您需要做三件事:

  1. 创建拦截器。

  2. 注册拦截器。

  3. 声明在何处拦截代码。

  这看起来非常简单的几句话却非常强大。例如,在清单 7 中,我为 Struts 动作创建了一个日志记录拦截器。这个拦截器在每个方法调用之前打印一句话:

  清单 7. 一个简单的日志记录拦截器

package ca.nexcel.books.interceptors;

import org.springframework.aop.MethodBeforeAdvice;

import java.lang.reflect.Method;

public class LoggingInterceptor implements MethodBeforeAdvice {

   public void before(Method method, Object[] objects, Object o) throws Throwable {
        System.out.println("logging before!");
    }
}

这个拦截器非常简单。before() 方法在拦截点中每个方法之前运行。在本例中,它打印出一句话,其实它可以做您想做的任何事。下一步就是在 Spring 配置文件中注册这个拦截器,如清单 8 所示:

  清单 8. 在 Spring 配置文件中注册拦截器

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
  "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
  <bean id="bookService" class="ca.nexcel.books.business.BookServiceImpl"/>

  <bean name="/searchSubmit"
        class="ca.nexcel.books.actions.SearchSubmit">
     <property name="bookService">
        <ref bean="bookService"/>
     </property>
  </bean>

  <!--  Interceptors -->
  <bean name="logger"   
    class="ca.nexcel.books.interceptors.LoggingInterceptor"/> |(1)

  <!-- AutoProxies -->
  <bean name="loggingAutoProxy"
        class="org.springframework.aop.framework.autoproxy.
          BeanNameAutoProxyCreator"> |(2)
    <property name="beanNames">
          <value>/searchSubmit</valuesgt; |(3)
    </property>
    <property name="interceptorNames">
        <list>
          <value>logger</value> |(4)
        </list>
    </property>
   </bean>

</beans> 

  您可能已经注意到了,清单 8 扩展了 清单 6 中所示的应用程序以包含一个拦截器。具体细节如下:

  在 (1) 处,我注册了这个拦截器。

  在 (2) 处,我创建了一个 bean 名称自动代理,它描述如何应用拦截器。还有其他的方法定义拦截点,但是这种方法常见而简便。

  在 (3) 处,我将 Struts 动作注册为将被拦截的 bean。如果您想要拦截其他的 Struts 动作,则只需要在 "beanNames" 下面创建附加的 标记。

  在 (4) 处,当拦截发生时,我执行了在 (1) 处创建的拦截器 bean 的名称。这里列出的所有拦截器都应用于“beanNames”。

  就是这样。就像这个例子所展示的,将您的 Struts 动作置于 Spring 框架的控制之下,为处理您的 Struts 应用程序提供了一系列全新的选择。在本例中,使用动作委托可以轻松地利用 Spring 拦截器提高 Struts 应用程序中的日志记录能力。

  结束语

  在本文中,您已经学习了将 Struts 动作整合到 Spring 框架中的三种窍门。使用 Spring 的 ActionSupport 来整合 Struts(第一种窍门中就是这样做的)简单而快捷,但是会将 Struts 动作与 Spring 框架耦合在一起。如果您需要将应用程序移植到一个不同的框架,则需要重写代码。第二种解决方法通过委托 RequestProcessor 巧妙地解开代码的耦合,但是它的可扩展性不强,并且当 Struts 的 RequestProcessor 变成一系列命令时,这种方法就持续不了很长时间。第三种方法是这三种方法中最好的:将 Struts 动作委托给 Spring 框架可以使代码解耦,从而使您可以在您的 Struts 应用程序中利用 Spring 的特性(比如日志记录拦截器)。

 
Struts2.3.14全支持包:构建与Spring集成的Java Web应用 在本章,我们将探索Struts2.3.14全支持包的核心元素和它的设计理念。Struts2是一个为了简化Web应用程序开发而设计的开源框架,它允许开发者快速地创建Web应用的前端和后端。全支持包确保了在不同环境下都能够稳定地运行。我们将首先对全支持包中的关键组件进行基本的介绍,然后逐步深入到各个组件的详细配置与使用案例,让读者能够逐渐熟悉Struts2框架的各个方面。 阅读详情

相关推荐

整合struts2和spring

只使用spring和struts进行整合

Spring和Struts2

一、Spring 1、Spring概述 Spring是一个轻量级的DI和AOP容器框架。 Spring是非侵入式的,基于spring开发的应用一般不依赖于spring的类。 DI:称作依赖注入(Dependency Injection),和控制反转的一个概念,具体的讲,当一个角色需要另外一个角色协助的时候,在传统的程序设计中,通常有调用者来创建被调用者的实例。但是在spring中创建被调用...

weixin_42078450的博客 3512

嵌入式存储进阶:除了KV存储,EasyFlash的IAP和LOG功能怎么玩?

本文深入探讨了嵌入式存储方案EasyFlash的高级功能,包括在线固件升级(IAP)和闪存日志存储(LOG)。通过详细解析IAP的双区备份设计和LOG的环形缓冲区架构,提供硬件适配、安全升级流程和日志管理技巧等实战指南,帮助开发者在物联网设备中实现可靠的数据存储和固件更新。

weixin_29280219的博客 416

Struts和Spring的区别?

        基于Web的MVC framework在Java EE的世界内已是空前繁荣。TTS网站上几乎每隔一两个星期就会有新的MVC框架发布。目前比较好的MVC,老牌的Struts(这里指的是Struts1.X)、Webwork。新兴的MVC框架有Spring MVC、Tapestry、JSF等。这些大多是著名团队的作品,另外还有一些边缘团队的作品,也相当出色,如Dinamica、VRapt

Eastyell的专栏 1万+

彻底卸载Ubuntu双系统,并完美回收100G空间给D盘

本文记录了安全卸载Ubuntu双系统并回收磁盘空间的全过程。作者首先通过Windows命令行彻底清除Ubuntu启动项,避免GRUB引导报错;随后在磁盘管理中删除Linux分区,将100G未分配空间合并至相邻的D盘。针对C盘空间不足问题,作者采用Dism++清理系统文件,并将用户文档、聊天记录等迁移至扩容后的D盘。最终实现了引导纯净、空间合理分配的目标,特别强调分区扩展必须遵循"相邻原则",建议通过间接迁移而非直接扩容来优化系统盘空间管理。

2403_85993278的博客 1514

Landsat9 地表温度反演方法

landsat9地表温度反演及缺失值处理方法

xiangliu12345的博客 3919

Spring整合Struts详解

Spring整合Struts详解

WYZSC的专栏 1339

【超简单】一文入门在Ubuntu系统使用GitHub

Github是基于git的代码仓库,对于开发项目的科研者或者工程师,代码仓库都是不可多得的版本控制与多端编程工具,今天这篇文章带你轻松Github入门,简单的项目本文的操作足矣。

a13337649640的博客 5238

spring框架与struts2框架的整合

spring与struts2的整合 1:单独配置struts 一:导入struts包 二:编写Action public class JboaEmployeeAction extends ActionSupport { public String login(){ System.out.println(“login…”); return SUCCESS; } } 三:配置struts.xml <?xml version="1.0" encoding="UTF-8" ?> i

weixin_43474701的博客 2227

SAP 行业扫盲系列之一:SAP 从业者的分类

本文简单介绍了 SAP 从业者的分类,限于笔者狭隘的视角,可能存在遗漏或者不恰当的地方,希望大家在评论区指出。 那些在知乎咨询上向我提问关于进入 SAP 行业建议的朋友们,也请大家提问时注明自己想具体从事 SAP 行业哪一类的工作,这样才能得到更让你们满意的回复。感谢阅读。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1590

微信小程序 - 实现Java微信支付退款功能以及退款流程,微信小程序前端+java后端完整示例源码,微信小程序退款功能详解,小程序订单申请退款和退款回调方法、查询退款等(新版微信支付,详细示例代码)

微信小程序开发-微信支付退款功能以及退款回调方法,微信支付退款API详解,微信小程序支付V3(支付、退款)Java实现微信小程序开发 小程序支付开发-小程序退款功能,微信小程序小程序和公众号 退款功能教程(含申请退款和退款回调,退款回调地址在商户后台配置或者代码自定义)最新版微信小程序支付,退款问题,小程序支付和退款功能详解,小程序申请退款,小程序处理退款,微信小程序支付与退款java,微信小程序退款及回调,JAVA实现微信小程序支付退款功能,退款api调用报错,如何解决退款申请无响应,如何用实现小程序订单

🏆 前端领域优质创作者 4159

Spring学习之整合struts框架

spring整合框架原理: 一个项目从上到下可以分为基本的三层,分别是web层,service层,dao层(逻辑层),如图所示: 因为框架各自发挥作用的层不同,所以我们就可以把框架互相组合起来,更好的完成项目 因此学习一下框架的组合,先来介绍下spring框架搭配struts框架, 组合流程如下: 一:建立一个web项目,我这里建立的名字叫 然后我们需要把Spring框架所需的包和struts所需的包都导入lib中 当然包是十分多,如果你把搞混了,可以采用上面新建一个分类直接在本地导入,就像这样 建立过

一千零二夜的博客 805

HQChart实战教程21 - uniapp app端K线图定制tooltip

HQChart实战教程21 - uniapp app端K线图定制tooltip序效果步骤2. 注册标题绘制事件3. 标题绘制回调函数格式说明eventdataobjtooltip显示函数完整代码HQChart代码地址 序 hqchartK线图内置一个tooltip, 如果需要定制一个tooltip, 我们可以通过注册绘制标题事件,来自己做一个div显示数据。 参考教程HQChart实战教程7-自定义显示手势点击K线显示信息 效果 步骤 在外部创建一个view,并在view里创建需要显示的信息字段. 例子里

小银 2565

Struts2 Spring3 Hibernate3 菜鸟教程 集成注解版本

集成注解版本和xml版本所不同的地方 如果类不是自己写的还是在xml里面进行配置 只有是自己写的类,直接在类上面标注对应的注解 注解版本不建议继承HibernateDaoSupport实现 必须提供事务支持 UserDAOImpl package com.jege.ssh.dao.impl; import java.util.List; import org.hibernate.Se

菜鸟教程 3131

8、干式变压器

干式变压器的发展,是人类不断挑战材料科学和热物理极限的过程,每一次技术突破,都是在。温度升高,ε_r反而下降(因为分子活动性增强,极化响应变慢)。:固体导热的热阻比液体对流大一个数量级,这是无法逾越的物理规律。Nomex在高温下不是逐渐分解,而是保持性能直到一个临界点。如果 T_a = 40°C,则 T_c = 146.7°C。干式变压器(固体介质分隔):热场、电场、流场(空气)形成三维氢键网络,即使在高温下也能保持机械强度。:不是在现有技术上修修补补,而是寻找新的。仍在H级绝缘允许范围内(≤180°C)

renpeng2692873032的博客 230

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

java企业开发二:struts2集成spring3

在 java企业开发一:struts2基础上进行集成spring3. 1.添加依赖: org.apache.struts struts2-spring-plugin ${struts.version} 注释:添加些依赖后会自动添加spring依赖.其中struts2-spring-plugin-x.x.x.jar里面有struts-plugin.xml,里面指明

xiejx618的专栏 1214

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Spring Security3与Struts2集成问题

在Spring3.1与Struts2.3集成时,访问jsp页面没问题,访问action却报如下异常: [code="java"] Cannot convert value of type [org.springframework.security.web.DefaultSecurityFilterChain] to required type [java.lang.String] for p...

sb33060418的专栏 201

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

struts2集成spring3的原理分析

Struts2与Spring进行集成的主要是为了使用 Spring的依赖注入和控制反转特性来实例struts2的action对象和注入action所依赖的对象。 它们的集成方法非常简单,只需要在项目的类路径中加入struts2的spring插件包,无需额外配置。当然web.xml不能初始struts和spring的初始化配置。 web.xml中的struts、spring配置具体如下:

荔子——一路走来 568

ssh集成(struts2+spring3+hibernate3)

ssh(struts2+spring3+hibernate3)集成(增删改查)实现 源代码:http://download.youkuaiyun.com/detail/tww19920930/5806397 index.jsp <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"

moonshine 1498

Struts2.2.3集成Spring3.1——实现简单的登录功能

    原文引用:http://www.arm4u.com/read.php?tid=104       准备工作:之前(http://www.arm4u.com/read.php?tid=96)我们已经下载了Struts2.2.3的相关jar包,同时实现了一个简单的功能。那么如何将Struts2集成Spring呢?现在Spring的最新版本已经到了3.1.0(下载地址:http://www....

生*活 164

java企业开发三:struts2+spring3再集成hibernate4

在java企业开发二:struts2集成spring3基础上再集成hibernate4. 前话:集成hibernate4可以使用org.springframework.orm.hibernate4.LocalSessionFactoryBean,但这个类是从spring3.1开始的,所以要先修正spring的版本 使用hinernate4.3以上的版本也会有bug,提示缺少方法.还是版本兼容性

xiejx618的专栏 2258

struts2与Spring3集成中Action的自动装配不起作用解决方法

今天碰到一个Spring的自动装配问题,关于Struts2和Spring3.0的集成。在网上搜到一篇文章: http://aeqopq231.blog.stcn.com/archives/2012/407199.html, 该文章指出使用autodect来解决,实际上这是错误的。autodect代表在bean寻找的方式上使用type或者constructor的方式来查找bean,因此不是这个问...

gly_ustb的博客 251

Struts2 Spring3 Hibernate3 集成注解版本

集成注解版本和xml版本所不同的地方 如果dao,service,action类不是自己写的还是在xml里面进行配置 只有是自己写的dao,service,action类,直接在类上面标注对应的注解 注解版本不建议继承HibernateDaoSupport实现持久层操作 必须要提供事务支持 UserDAOImpl package com.jege.ssh.dao....

weixin_30344131的博客 115

Struts2 Spring3 Hibernate3 集成xml版本-2

依赖流程 控制器action依赖service层 业务逻辑层service依赖dao层 持久层dao依赖spring提供的类 UserDAOImpl /** * @author JE哥 * @email 1272434821@qq.com * @description:dao接口实现 */ public class UserDAOImpl extend...

weixin_30545285的博客 89

Struts2+Spring+Hibernate3集成

Struts2,Spring,Hibernate集成

hxdeng的博客 617

Struts2 Spring3 hibernate3三个框架的集成

刚学SSH,现在来谈谈SSH的集成 首先是jar的导入,无可置疑要把SSH的jar包导入到lib下,还有数据库驱动包 接下来就是拷配置文件了, 1.修改web.xml filter> struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter ...

天一定是蓝色的 214
上一篇: Spring集成struts(2)
下一篇: Spring XML配置十二个最佳实践
eyejava
博客等级 码龄20年 11粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值