深入探讨 Spring 与 Struts 的集成方案

【IT之路】Struts2调用Service配置 一、使用ApplicationContext实现调用 1、配置pom.xml,导入包 不导入这个包,ServletActionContext使用会编译失败 见:【IT之路】FAQ-Struts2报错:ServletActionContext报错 <!-- servlet --> <dependency> <groupId>javax.se... 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> Spring是一个轻量级(大小和系统开支的角度)的IoC和AOP容器.它力图简化J2EE开发即J2EE without EJB.而且作为帮助企业级开发的核心支柱,Spring为模型层(OR持久层:Hibernate、JDO、iBatis等)服务层(EJB、JNDI、WebService)以及表现层(Struts、JSF、Velocity)都提供了良好的支持和集成方案. 访问Spring官方站 Jakarta-Struts是Apache软件组织提供的一个开源项目.它为Java Web应用提供了基于Model-View-Controller的MVC框架,尤其适用于开发大型可扩展的Web应用.尽管基于Java的MVC框架层出不穷,事实上Spring的MVC模型也提供了驱动应用系统Web层的能力,但Jakarta-Struts仍然是所有这些框架中的佼佼者. 下面,将如何整合这两个J2EE领域的经典项目给出两套详尽的集成方案. 1.首先我们来看一个Spring-Struts整合应用下的控制器Action类源代码. public class CourceAction extends Action { private CourceService courceService; public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { Set allCources = courceService.getAllCources(); //..........the other statements request.setAttribute("cources", allCources); return mapping.findForward("jspView"); } } 分析:CourceService为一个业务实现的接口,此接口声明了一系列的业务处理方法.该方法的实现配置为Spring上下问的一个Bean.由此看来,我们大家都可能会产生一个疑问:Struts action如何取得一个包含在Spring上下文中的Bean呢?为了回答这个问题,Spring提供了两种与Struts集成的方式: (1).从一个知晓Spring上下文的基类派生我们自己的Struts Action类.然后,在派生类中就可以使用super.XX()方法来获得一个对Spring受控Bean的引用. (2).将请求委托给作为Spring Bean管理的Struts Action来处理. 2.注册Spring插件:为了使Struts Action能够访问由Spring管理的Bean,我们就必须要注册一个知道Spring应用上下文的Struts插件.可以在struts-config.xml中通过如下的方式来完成注册. <plug-in classname="org.springframework.web.struts.ContextLoadPlugin"> <set-property value="WEB-INF/Yhcip.xml,......" property="contextConfigLocation"> </PLUG-IN> ContextLoadPlugin()负责装载一个Spring应用上下文.(具体的说:是一个WebApplicationContext).value属性值为要加载的配置Spring受控Bean的xml文件的URI. 3.完成第一种集成方案:实现一个知晓Spring的Action基类. 这种集成方案是从一个公共的能够访问Spring应用上下文的基类中派生所有的Struts Action,但值得庆幸的是:我们不用自己去编写这个知晓Spring应用上下文的基类,因为Spring已经提供了org.springframework.web.struts.ActionSupport:一个org.apache.struts.action.Action的抽象实现.它重载了setServlet()方法以从ContextLoaderPlugin中获取WebapplicationContext.因此,任何时候我们只需要调用super.getBean()方法即可获得一Spring上下文中的一个Bean的引用. 我们再来看一段Action源代码: public class CourceAction extends ActionSupport { public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { //取得Spring上下文 ApplicationContext context = super.getWebApplicationContext(); //取得CourceService Bean CourseService courseService = (CourseService) context.getBean("courseService"); Set allCources = courceService.getAllCources(); request.setAttribute("cources", allCources); //..........the other statements. return mapping.findForward("jspView"); }} 分析:这个Action类由ActionSupport派生,当CourceAction需要一个Spring受控Bean时:它首先调用基类的getWebApplicationContext()方法以取得一个Spring应用上下文的引用;接着它调用getBean()方法来获取由Spring管理的courceService Bean的一个引用. 小结 至此,我们已经用第一种方案圆满的完成了Spring与Struts的集成工作.这种集成方式的好处在于直观简洁容易上手.除了需要从ActionSupport中派生,以及需要从应用上下文中获取Bean之外,其他都与在非Spring的Struts中编写和配置Action的方法相似.但这种集成方案也有不利的一面.最为显著的是:我们的Action类将直接使用Spring提供的特定类,这样会使我们的Struts Action(即控制层)的代码与Spring紧密耦合在一起.这是我们不情愿看到的.另外,Action类也负责查找由Spring管理的Bean,这违背了反向控制(IoC)的原则. 4.实现第二种集成方案:代理和委托Action. 这种集成方案要求我们编写一个Struts Action,但它只不过是一个包含在Spring应用上下文中的真正Struts Action的一个代理.该代理Action从Struts插件ContextLoaderPlugIn中获取应用上下文,从中查找真正的Struts Action,然后将处理委托给真正的Struts Action.这个方法的幽雅之处在于:只有代理action才会包含Spring特定的处理.真正的Action可以作为org.apache.struts.Action的子类来编写. 下面我们来看一段在之中集成方式下的Struts Action源代码: public class CourceAction extends Action { private CourceService courceService; public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { Set allCources = courceService.getAllCources(); request.setAttribute("cources", allCources); //..........the other statements. return mapping.findForward("jspView"); } /* 注入CourceService */ public void setCourceService(CourceService courceService) { this.courceService = courceService; }} 分析:大家可以看到,在这种方式之下,我们的Struts Action类和Spring是低耦合的,它仅仅依赖了Spring提供的反向控制(IoC)机制把CourceService注入到了我们的Action中.到此,大家肯定会有一个疑问:那就是Spring到底是如何提供IoC反向控制的呢?回答这个问题,我们需要完成两个步骤的配置: (1).在struts-config.xml中注册Struts Action.但要注意的是我们在这里注册的是代理Action.幸运的是,我们不必亲自编写这个类.因为Spring已经通过org.springframework.web.struts.DelegatingActionProxy提供了这个代理的Action.具体的配置方法如下: <action type="org.springframework.web.struts.DelegatingActionProxy" path="/listCourses"> (2)将真正的Struts Action作为一个Spring Bean并在Spring上下文配置文件中作为一个Bean注册之.并将Action所要引用的courceService注入给它. <bean class="com.eRedCIP.web.CourceAction" name="/listCourses"> <property name=""> <ref bean="courseService"> </property> </bean> 注意:name属性的值是非常重要的,它必须和struts-config.xml中的path属性完全一致.这是因为DelegatingActionProxy会使用path属性值在Spring上下文中查找真正的Action.使用DelegatingActionProxy的好处在于我们可以不使用任何Spring特定的类来编写Struts Action.同时,Struts动作能够利用IoC取得和他合作的对象.唯一不足之处就是不太直观,配置相对复杂.为了使action委托显得更为直观一些,我们可对这种集成方案做进一步的改进:使用请求委托. 5.使用请求委托. 为了使action委托看上去更为直观一些,Spring提供了DelegatingRequestProcessor,另一种专门用于Spring的请求处理器.需要在struts-config.xml中做如下配置: <controller processorclass="org.springframework.web.struts.DelegatingRequestProcessor"> 这样,DelegatingRequestProcessor将告诉Struts自动将动作请求委托给Spring上下文中的Action来处理.这使得我们可以在struts-config.xml中用struts action的真正类型来声明它们.例如: <action type="com.eRedCIP.web.CourceAction" path="/listCourses"> 当接受到一个针对/listCourses的请求时,DelegatingRequestProcessor会自动从Spring上下文配置文件中查找一个名为/listCourses的Bean(实为一个Struts Action)类. <action type="com.eRedCIP.web.CourceAction" path="/listCourses">
一份关于“RAG Spring AI + Milvus 实践” java请基于以下参考资料回答问题:===== 参考资料 =====问题:{query}回答:""").build();关键点建议维度一致必须 Embedding 模型输出维度完全一致(如 OpenAI ada-002 是 1536)端口注意Milvus 连接使用 gRPC 端口19530,而非 HTTP 端口 9091阈值调优和topK需根据业务场景调优,并非越高越好部署选型开发测试用 Lite,生产环境建议 Standalone 或 Distributed。 阅读详情

相关推荐

RV1126 MIPI CSI-2驱动RGB888图像采集的V4L2实战解析

本文详细解析了在RV1126平台上通过MIPI CSI-2接口采集RGB888格式图像的完整V4L2实战流程。核心内容包括设备树(DTS)配置、内核驱动适配、Media Controller链路调试,以及使用v4l2-ctl工具进行图像抓取验证的方法,旨在帮助开发者打通从硬件连接到稳定采集RGB888图像数据的关键环节。

weixin_29161719的博客 133

SpringStruts集成方案

Spring是一个轻量级(大小和系统开支的角度)的IoC和AOP容器.它力图简化J2EE开发即J2EE without EJB.而且作为帮助企业级开发的核心支柱,Spring为模型层(OR持久层:Hibernate、JDO、iBatis等)服务层(EJB、JNDI、WebService)以及表现层(Struts、JSF、Velocity)都提供了良好的支持和集成方案. 访问Spring官方站 ...

zhujunli0310 206

游戏战斗系统架构设计的演绎之路——从一坨意大利面条到一座精密钟表

摘要:游戏战斗系统架构设计的演进之路 本文系统梳理了游戏战斗系统从早期街机到现代3A大作的架构发展历程。70-80年代的街机游戏采用基础碰撞盒判定(如《街头霸王》);90年代实现动画融合状态机架构(《最终幻想》《拳皇》);2000年后MMO引入服务器验证同步技术(《魔兽世界》);3D时代融合物理引擎智能AI(《GTA5》《只狼》);移动端则发展出轻量化架构云端判定(《王者荣耀》)。现代战斗系统已实现模块化、数据驱动和热更新,未来趋势是AI裁判云战斗系统。这一演进过程展现了技术创意的完美结合,数百

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 768

Springstruts 整合的三种方式

Springstruts 整合的三种方式。1,使用SpringActionSupport 2, 使用Spring 的 DelegatingRequestProcessor 类。3,全权委托。无论用那种方法来整合第一步就是要为struts来装载spring的应用环境。 就是在 struts 中加入一个插件。struts-config.xml中   ="/WEB-INF/app

Shine的专栏 1万+

深入探讨SpringStruts集成方案深入探讨SpringStruts集成方案

pring是一个轻量级(大小和系统开支的角度)的IoC和AOP容器。它力图简化J2EE开 发即J2EE without EJB。而且作为帮助企业级开发的核心支柱,Spring为模型层(OR持久层:Hibernate、JDO、iBatis等)服务层(EJB、 JNDI、WebService)以及表现层(Struts、JSF、Velocity)都提供了良好的支持和集成方案。  Jakarta-St

ruixj的专栏 1115

深入探讨SpringStruts集成方案(转)

导读:   深入探讨 Spring Struts集成方案转自:[url=http://www.mysiky.com/dig/CreationShow.aspx?CreationID=39][color=red]http://www.mysiky.com/dig/CreationShow.aspx?CreationID=39[/color][/url]   Spring是一个轻量级(大小和系

sun606的专栏 470

深入探讨SpringStruts集成方案

引言Spring是一个轻量级(大小和系统开支的角度)的IoC和AOP容器.它力图简化J2EE开发即J2EE without EJB.而且作为帮助企业级开发的核心支柱,Spring为模型层(OR持久层:Hibernate、JDO、iBatis等)服务层(EJB、JNDI、WebService)以及表现层(Struts、JSF、Velocity)都提供了良好的支持和集成方案. 访问Spring官方站J

hbrqlpf的专栏 789

深入探讨SpringStruts集成方案

 Spring是一个轻量级(大小和系统开支的角度)的IoC和AOP容器。它力图简化J2EE开发即J2EE without EJB。而且作为帮助企业级开发的核心支柱,Spring为模型层(OR持久层:Hibernate、JDO、iBatis等)服务层(EJB、 JNDI、WebService)以及表现层(Struts、JSF、Velocity)都提供了良好的支持和集成方案。Jakarta-S

Eleven's Blog 917

Spring AOP 实现通用 Token 自动刷新重试工具包

这套组件把 token 过期的识别、刷新、重试全部交给 AOP 切面处理,业务代码只需要添加注解,消除样板代码。对于系统对接 U9、EBS、IMS 等多外部系统场景,非常适合接入。

u014755700的博客 188

SpringBoot 3:入门应用实战》第 11 章 嵌入式容器 阅读笔记 29

SpringBoot 3:入门应用实战》第 11 章 嵌入式容器 阅读笔记 29

道友 509

Spring Cache 多缓存后端怎么选:Caffeine、Redis NoOp 的路由边界

MetaLite 是面向企业生产环境的新一代 Java 微服务技术底座。系列文章重点分享代码背后的设计思路、技术取舍工程实践。

MetaLite的博客 379

SpringBoot 各版本 Profile 多环境配置完整对比(2.x/ 2.4+ / 3.x/4.x

方式 1:拆分多个配置文件(企业项目通用,全版本兼容)application-{profile名}.yml/yamlapplication.yml:主公共配置文件,存放通用配置,指定激活哪一个环境application-dev.yml:开发环境application-test.yml:测试环境application-prod.yml:生产环境加载规则:一定会加载主文件,再加载被激活的环境配置文件;相同 key,环境配置覆盖主配置。该写法所有 SpringBoot 版本全部兼容,无版本差异。

m0_63611023的博客 162

SpringCloud---可观测性监控:Actuator / Micrometer / Prometheus / Grafana 深度解析

Spring Cloud 可观测性监控:Actuator / Micrometer / Prometheus / Grafana 深度解析

zhzhxian的博客 359

苍穹外卖-day07(Spring Cache & 购物车业务逻辑)

@GetMapping(“/list”) @ApiOperation(“根据分类id查询套餐”) @Cacheable(cacheNames = “setmealCache”,key = “#categoryId”) //key: setmealCache::100 public Result<List> list(Long categoryId) { Setmeal setmeal = new Setmeal();

2601_96207397的博客 216

第 2 章 spinlock qspinlock:从测试-设置到 MCS 队列

<think>我们根据要求,需要生成≤150字的文章摘要。内容是关于自旋锁的演进,从test-and-set到qspinlock。需要简洁概括核心。注意不要超过150字。撰写摘要。 </think>自旋锁保护不可睡眠的短临界区,关抢占防死锁。从朴素test-and-set的缓存颠簸不公平,到ticket lock解决FIFO公平但仍有缓存争用,最终qspinlock用32位字编码locked/pending/tail,低争用走快速路径,高争用构建MCS队列,让CPU各自自旋本地节点,兼顾性能公平。

图形/计算GPU的驱动与虚拟化技术分享园地 527

G120C-GSD文件-PN-V4.7.13.zip

G120C_GSD文件_PN_V4.7.13

上一篇: 垃圾清理势在必行——Java垃圾收集算法
下一篇: Java对象持久化技术Hibernate 二
java169
博客等级 码龄18年 27粉丝 2568原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值