- 浏览: 733645 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
18335864773:
看了楼主写的用jxl生成excel。有地方用到了流,还特别强调 ...
jxl导出excel文件简单示例 -
shaoshou111:
查看Apache的并发请求数及其TCP连接状态netstat ...
Linux查看连接数,并发数 -
gengjunshi:
非常感谢哈,刚好在学webservice编程,很有用呢。
JAX-WS开发webservice示例详解 -
zcgewu:
encrypt2()和encrypt()有什么区别
JAVA实现AES加密 -
java爱好者92:
ireport的操作还是相对比较复杂的,帆软报表会相对简单一点 ...
iReport报表开发中常见的问题
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类源代码.
分析: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中通过如下的方式来完成注册.
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源代码:
分析:这个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源代码:
分析:大家可以看到,在这种方式之下,我们的Struts Action类和Spring是低耦合的,它仅仅依赖了Spring提供的反向控制(IoC)机制把CourceService注入到了我们的Action中.到此,大家肯定会有一个疑问:那就是Spring到底是如何提供IoC反向控制的呢?回答这个问题,我们需要完成两个步骤的配置:
(1).在struts-config.xml中注册Struts Action.但要注意的是我们在这里注册的是代理Action.幸运的是,我们不必亲自编写这个类.因为Spring已经通过org.springframework.web.struts.DelegatingActionProxy提供了这个代理的Action.具体的配置方法如下:
(2)将真正的Struts Action作为一个Spring Bean并在Spring上下文配置文件中作为一个Bean注册之.并将Action所要引用的courceService注入给它.
注意:name属性的值是非常重要的,它必须和struts-config.xml中的path属性完全一致.这是因为DelegatingActionProxy会使用path属性值在Spring上下文中查找真正的Action.使用DelegatingActionProxy的好处在于我们可以不使用任何Spring特定的类来编写Struts Action.同时,Struts动作能够利用IoC取得和他合作的对象.唯一不足之处就是不太直观,配置相对复杂.为了使action委托显得更为直观一些,我们可对这种集成方案做进一步的改进:使用请求委托.
5.使用请求委托.
为了使action委托看上去更为直观一些,Spring提供了DelegatingRequestProcessor,另一种专门用于Spring的请求处理器.需要在struts-config.xml中做如下配置:
这样,DelegatingRequestProcessor将告诉Struts自动将动作请求委托给Spring上下文中的Action来处理.这使得我们可以在struts-config.xml中用struts action的真正类型来声明它们.例如:
当接受到一个针对/listCourses的请求时,DelegatingRequestProcessor会自动从Spring上下文配置文件中查找一个名为/listCourses的Bean(实为一个Struts Action)类.
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">
发表评论
-
父页面与子页面的相互调用
2017-12-14 14:51 2567一、在页面里用 open ... -
(转)Java jacob调用打印机打印word文档
2017-12-01 17:33 3760折腾了好久,最终决定由用一个第三方的,找到了jacob,还不 ... -
gson的使用分享
2016-01-15 13:48 1834一、 最基本的对象与JSON相互转换 1、 定义java对象 ... -
(转)FindBugs规则整理
2015-12-18 10:40 6617FindBugs是基于Bug Patterns ... -
Gson注解和GsonBuilder
2015-04-07 11:49 1695//注意这里的Gson的构建方式为GsonBuilder, ... -
Spring AOP 的@Aspect (转)
2015-03-03 15:50 906从Spring 2.0开始,可以使用基于schema及@As ... -
Hibernate一对多和多对一关系详解 (转载)
2014-07-10 17:00 1840双向一对多关系,一是关系维护端(owner side),多是关 ... -
Struts2的Action如何交给spring来管理
2014-07-10 11:35 853我的Action是 <package name=&qu ... -
javax.xml.ws.soap.SOAPFaultException: Cannot create a secure XMLInputFactory
2014-06-04 20:26 1814javax.xml.ws.soap.SOAPFaultExce ... -
照片打包下载
2014-05-22 09:32 1227设计思路: 通过业务表中照片编号获得需要下载的照片列表 ... -
获得请求IP
2013-12-06 14:18 1112在AbstractInterceptor中 Action ... -
jxl导入excel
2013-09-17 16:56 933jxl读取excel和写excel基本类似,只是Writab ... -
Apache与Nginx的优缺点比较(转)
2013-08-26 11:13 11681、nginx相对于apache的优点: 轻量级,同样起we ... -
findbugs清理总结
2013-08-19 14:45 3014findbugs警告26个。主要有以下9类问题。 1、B ... -
Spring 2.0 的AOP
2013-05-22 16:36 932我使用的是Spring 2.0 的AOP, 它引入了一种更加简 ... -
APK下载配置
2013-04-15 17:44 1077tomcat-6.0\conf\web.xml <mi ... -
My97DatePicker在Frame中无法打开站点
2013-04-09 17:17 1173大部分日期控件都具备功能如:带时间显示,支持周显示,自定义格式 ... -
jxl导出excel文件简单示例
2013-02-19 11:04 8860package util; import java. ... -
(转)在java中通过JDBC连接Oracle,ResultSet返回总为空,这个问题是怎么解决呢
2013-01-08 10:38 16428数据库基本访问格式 Class.forName(“JDBC驱动 ... -
转:spring多个定时任务quartz配置
2012-11-22 09:07 1539applicationContext.xml <im ...
相关推荐
下面,我们将深入探讨Spring与Struts集成方案二的关键知识点。 首先,集成的主要目的是将Spring的业务逻辑管理与Struts的视图和控制层结合起来。在方案二中,通常会使用Spring作为应用程序的核心框架,负责管理Bean...
下面,我们将深入探讨Spring与Struts的集成方式,并基于给定的标题“Spring与Struts集成方式一”展开讨论。 首先,我们需要理解Spring和Struts的核心概念。Spring框架提供了一个全面的基础架构,支持创建健壮的、...
本文将深入探讨Spring与Struts的集成方式,并提供一种常见集成方案的详细步骤。 首先,我们要了解Spring和Struts各自的核心功能。Spring框架主要负责业务逻辑管理、数据访问以及事务处理,而Struts则专注于视图和...
下面我们将详细探讨Spring与Struts集成的相关知识点。 首先,Spring 框架以其强大的DI(Dependency Injection)和AOP(Aspect Oriented Programming)特性而闻名,它可以管理对象的生命周期和依赖关系,使得代码...
本文将探讨如何将Spring与Struts进行集成,特别是第一种方案的实现细节。 首先,让我们了解集成Spring和Struts的基本概念。Spring作为一个控制反转(IoC)容器,可以管理Struts中的Action类实例,提供依赖注入,使...
2. **使用Spring-Struts集成库**: Spring社区提供了spring-struts库,这个库包含了一些专门用于整合Struts和Spring的类和标签库。通过使用这个库,可以方便地在Struts的Action配置中声明Spring的bean,使Spring...
下面我们将详细探讨集成Spring和Struts2所需的jar包及其作用。 1. **Spring Framework**: - `spring-beans.jar`: 包含了Spring的核心组件,如Bean工厂和依赖注入。 - `spring-context.jar`: 提供了上下文相关的...
本文将详细探讨一种Spring与Struts集成的方案。 ### 集成背景 Spring的IoC容器可以帮助我们管理对象的生命周期和依赖关系,而Struts则专注于处理HTTP请求和响应,以及业务逻辑的流转。通过集成,我们可以让Spring...
在"第27讲--Struts与Spring集成方案1(Struts集成Spring)"中,我们主要探讨如何将Struts2与Spring进行整合。集成的主要目的是利用Spring的强大功能来管理Struts2中的Action类,从而实现更灵活的依赖注入和更好的控制...
下面我们将详细探讨Spring与Struts1.2的整合集成及其核心概念。 1. **Spring框架介绍** Spring是一个全面的后端开发框架,包括了数据访问、事务管理、远程调用、AOP等模块。它通过DI和AOP简化了对象的创建和管理,...
本文将深入探讨如何利用Ibatis实现一对多关系、批处理、事务管理和与Spring及Struts2的集成。 首先,让我们来看一下“一对多”关系。在数据库设计中,一对多关系很常见,比如一个用户可以有多个订单。在Ibatis中,...
本篇文章将详细探讨Spring、Struts和CXF这三个框架的集成,以及它们如何协同工作以提升应用程序的性能和可维护性。 首先,Spring是一个全面的Java应用框架,它提供了依赖注入(DI)和面向切面编程(AOP)等核心特性...
现在,让我们一起深入探讨这个"spring+struts+mysql-conn"项目所包含的知识点。 首先,Spring是一个全面的Java应用框架,它提供了依赖注入(DI)和面向切面编程(AOP)的核心功能。Spring框架的主要目标是简化Java...
在这个"spring+struts+mybatis整合项目"中,我们将深入探讨这三个框架如何进行集成,以及它们各自的核心功能。 **Spring框架** 是一个全面的企业级应用开发框架,它提供了依赖注入(DI)和面向切面编程(AOP)等...
本文将深入探讨Spring与Struts结合时可能会遇到的问题以及相应的解决策略,帮助开发者更好地理解和应对这些挑战。 Spring框架以其依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented ...
接下来,我们将详细探讨Spring和Struts整合开发中的关键知识点。 1. **Spring框架**:Spring的核心特性包括DI(依赖注入)和AOP(面向切面编程)。DI使得对象之间的关系在配置文件中定义,而不是硬编码在代码里,这...
Struts2与Spring集成,可以实现Action类的依赖注入,提高代码的可测试性和可维护性。 **Maven** Maven是一个项目管理和综合工具,主要用于构建、文档生成、报告、依赖管理和项目信息管理。通过POM(Project Object ...
本文将围绕`org.springframework.web.struts-3.1.0.M2.jar`这个组件,深入探讨Spring与Struts的整合过程,以及其背后的原理和技术要点。 `org.springframework.web.struts-3.1.0.M2.jar`是Spring为Struts提供的一个...
在这个"spring和struts的整合-aop的使用"主题中,我们将深入探讨如何将Spring与Struts2集成,并利用Spring的AOP实现日志记录。 首先,整合Spring和Struts2的关键在于配置。通常,我们需要在Struts2的配置文件...
本书以Struts,Hibernate,Spring为核心详细地讲解了这三个组件的基础知识和基本使用方法,并通过一系列集成开发实例讲解了这三个组件在J2EE项目中的应用。. 本书对每一个组件的讲解都是以入门级实例开始的,然后...