ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:22.65KB ,
资源ID:25884722      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/25884722.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Spring结合Struts开发.docx)为本站会员(b****0)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Spring结合Struts开发.docx

1、Spring结合Struts开发Spring整合Struts开发JavaEE应用程序学术部 张亚涛 同学们是否听说过控制反转 (IOC) 设计模式,很长一段时间以来一直在流传关于它的信息。如果你在任何功能中使用过 Spring 框架,那么你就知道其原理的作用。在本文中,我利用这一原理把一个 Struts 应用程序注入 Spring 框架,你将亲身体会到 IOC 模式的强大。将一个 Struts 应用程序整合进 Spring 框架具有多方面的优点。首先,Spring 是为解决一些关于 JEE 的真实世界问题而设计的,比如复杂性、低性能和可测试性,等等。第二,Spring 框架包含一个 AOP 实

2、现,允许你将面向方面技术应用于面向对象的代码。第三,一些人可能会说 Spring 框架只有处理 Struts 比 Struts 处理自己好。但是这是观点问题,我演示三种将 Struts 应用程序整合到 Spring 框架的方法后,具体由你自己决定使用哪一种。 为什么 Spring 这么了不起? Spring 的创立者 Rod Johnson 以一种批判的眼光看待 Java 企业软件开发,并且提议很多企业难题都能够通过战略地使用 IOC 模式(也称作依赖注入)来解决。当 Rod 和一个具有奉献精神的开放源码开发者团队将这个理论应用于实践时,结果就产生了 Spring 框架。简言之,Spring

3、是一个轻型的容器,利用它可以使用一个外部 XML 配置文件方便地将对象连接在一起。每个对象都可以通过显示一个 JavaBean 属性收到一个到依赖对象的引用,留给你的简单任务就只是在一个 XML 配置文件中把它们连接好。依赖注入是一个强大的特性,但是 Spring 框架能够提供更多特性。Spring 支持可插拔的事务管理器,可以给你的事务处理提供更广泛的选择范围。它集成了领先的持久性框架,并且提供一个一致的异常层次结构。Spring 还提供了一种使用面向方面代码代替正常的面向对象代码的简单机制。Spring AOP 允许你使用拦截器 在一个或多个执行点上拦截应用程序逻辑。加强应用程序在拦截器中

4、的日志记录逻辑会产生一个更可读的、实用的代码基础,所以拦截器广泛用于日志记录。你很快就会看到,为了处理横切关注点,Spring AOP 发布了它自己的拦截器,你也可以编写你自己的拦截器。整合 Struts 和 Spring 与 Struts 相似,Spring 可以作为一个 MVC 实现。这两种框架都具有自己的优点和缺点,尽管大部分人同意 Struts 在 MVC 方面仍然是最好的。很多开发团队已经学会在时间紧迫的时候利用 Struts 作为构造高品质软件的基础。Struts 具有如此大的推动力,以至于开发团队宁愿整合 Spring 框架的特性,而不愿意转换成 Spring MVC。没必要进行

5、转换对你来说是一个好消息。Spring 架构允许你将 Struts 作为 Web 框架连接到基于 Spring 的业务和持久层。最后的结果就是现在一切条件都具备了。在接下来的小窍门中,你将会了解到三种将 Struts MVC 整合到 Spring 框架的方法。我将揭示每种方法的缺陷并且对比它们的优点。 一旦你了解到所有三种方法的作用,我将会向你展示一个令人兴奋的应用程序,这个程序使用的是这三种方法中我最喜欢的一种。 三个小窍门接下来的每种整合技术(或者窍门)都有自己的优点和特点。我偏爱其中的一种,但是我知道这三种都能够加深你对 Struts 和 Spring 的理解。在处理各种不同情况的时候,

6、这将给你提供一个广阔的选择范围。方法如下: 使用 Spring 的 ActionSupport 类整合 Structs 使用 Spring 的 DelegatingRequestProcessor 覆盖 Struts 的 RequestProcessor 将 Struts Action 管理委托给 Spring 框架 装载应用程序环境无论你使用哪种技术,都需要使用 Spring 的 ContextLoaderPlugin 为 Struts 的 ActionServlet 装载 Spring 应用程序环境。就像添加任何其他插件一样,简单地向你的 struts-config.xml 文件添加该插件

7、,如下所示: 前面已经提到过,在 下载 部分,你能够找到这三个完全可使用的例子的完整源代码。每个例子都为一个书籍搜索应用程序提供一种不同的 Struts 和 Spring 的整合方法。你可以在这里看到例子的要点,但是你也可以下载应用程序以查看所有的细节。窍门 1. 使用 Spring 的 ActionSupport 手动创建一个 Spring 环境是一种整合 Struts 和 Spring 的最直观的方式。为了使它变得更简单,Spring 提供了一些帮助。为了方便地获得 Spring 环境,org.springframework.web.struts.ActionSupport 类提供了一个

8、getWebApplicationContext() 方法。你所做的只是从 Spring 的 ActionSupport 而不是 Struts Action 类扩展你的动作,如清单 1 所示:清单 1. 使用 ActionSupport 整合 Strutspackage ca.nexcel.books.actions;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.Http

9、ServletResponse;import org.apache.struts.action.ActionError;import org.apache.struts.action.ActionErrors;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import org.apache.struts.action.DynaActionForm;import org.sp

10、ringframework.context.ApplicationContext;import org.springframework.web.struts.ActionSupport;import ca.nexcel.books.beans.Book;import ca.nexcel.books.business.BookService;public class SearchSubmit extends ActionSupport |(1) public ActionForward execute( ActionMapping mapping, ActionForm form, HttpSe

11、rvletRequest request, HttpServletResponse response) throws IOException, ServletException DynaActionForm searchForm = (DynaActionForm) form; String isbn = (String) searchForm.get(isbn); /the old fashion way /BookService bookService = new BookServiceImpl(); ApplicationContext ctx = getWebApplicationCo

12、ntext(); |(2) BookService bookService = (BookService) ctx.getBean(bookService); |(3) Book book = bookService.read(isbn.trim(); if (null = book) ActionErrors errors = new ActionErrors(); errors.add(ActionErrors.GLOBAL_ERROR,new ActionError (message.notfound); saveErrors(request, errors); return mappi

13、ng.findForward(failure) ; request.setAttribute(book, book); return mapping.findForward(success); 让我们快速思考一下这里到底发生了什么。在 (1) 处,我通过从 Spring 的 ActionSupport 类而不是 Struts 的 Action 类进行扩展,创建了一个新的 Action。在 (2) 处,我使用 getWebApplicationContext() 方法获得一个 ApplicationContext。为了获得业务服务,我使用在 (2) 处获得的环境在 (3) 处查找一个 Sprin

14、g bean。 这种技术很简单并且易于理解。不幸的是,它将 Struts 动作与 Spring 框架耦合在一起。如果你想替换掉 Spring,那么你必须重写代码。并且,由于 Struts 动作不在 Spring 的控制之下,所以它不能获得 Spring AOP 的优势。当使用多重独立的 Spring 环境时,这种技术可能有用,但是在大多数情况下,这种方法不如另外两种方法合适。窍门 2. 覆盖 RequestProcessor将 Spring 从 Struts 动作中分离是一个更巧妙的设计选择。分离的一种方法是使用 org.springframework.web.struts.Delegatin

15、gRequestProcessor 类来覆盖 Struts 的 RequestProcessor 处理程序,如清单 2 所示:清单 2. 通过 Spring 的 DelegatingRequestProcessor 进行整合 |(1) 我利用了 标记来用 DelegatingRequestProcessor 覆盖默认的 Struts RequestProcessor。下一步是在我的 Spring 配置文件中注册该动作,如清单 3 所示:清单 3. 在 Spring 配置文件中注册一个动作 |(1) 注意:在 (1) 处,我使用名称属性注册了一个 bean,以匹配 struts-config 动

16、作映射名称。SearchSubmit 动作揭示了一个 JavaBean 属性,允许 Spring 在运行时填充属性,如清单 4 所示:清单 4. 具有 JavaBean 属性的 Struts 动作package ca.nexcel.books.actions;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apa

17、che.struts.action.Action;import org.apache.struts.action.ActionError;import org.apache.struts.action.ActionErrors;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import org.apache.struts.action.DynaActionForm;impo

18、rt ca.nexcel.books.beans.Book;import ca.nexcel.books.business.BookService;public class SearchSubmit extends Action private BookService bookService; public BookService getBookService() return bookService; public void setBookService(BookService bookService) | (1) this.bookService = bookService; public

19、 ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException DynaActionForm searchForm = (DynaActionForm) form; String isbn = (String) searchForm.get(isbn); Book book = getBookService().read(isbn.trim()

20、; |(2) if (null = book) ActionErrors errors = new ActionErrors(); errors.add(ActionErrors.GLOBAL_ERROR,new ActionError(message.notfound); saveErrors(request, errors); return mapping.findForward(failure) ; request.setAttribute(book, book); return mapping.findForward(success); 在清单 4 中,你可以了解到如何创建 Strut

21、s 动作。在 (1) 处,我创建了一个 JavaBean 属性。DelegatingRequestProcessor自动地配置这种属性。这种设计使 Struts 动作并不知道它正被 Spring 管理,并且使你能够利用 Sping 的动作管理框架的所有优点。由于你的 Struts 动作注意不到 Spring 的存在,所以你不需要重写你的 Struts 代码就可以使用其他控制反转容器来替换掉 Spring。 DelegatingRequestProcessor 方法的确比第一种方法好,但是仍然存在一些问题。如果你使用一个不同的 RequestProcessor,则需要手动整合 Spring 的

22、DelegatingRequestProcessor。添加的代码会造成维护的麻烦并且将来会降低你的应用程序的灵活性。此外,还有过一些使用一系列命令来代替 Struts RequestProcessor 的传闻。 这种改变将会对这种解决方法的使用寿命造成负面的影响。窍门 3. 将动作管理委托给 Spring 一个更好的解决方法是将 Struts 动作管理委托给 Spring。你可以通过在 struts-config 动作映射中注册一个代理来实现。代理负责在 Spring 环境中查找 Struts 动作。由于动作在 Spring 的控制之下,所以它可以填充动作的 JavaBean 属性,并为应用诸如 Spring 的 AOP 拦截器之类的特性带来了可能。 清单 5 中的 Action 类与清单 4 中的相同。但是 struts-config 有一些不同:清单 5. Spring 整合的委托方法 action path=/welcome forward=/WEB-INF/pag

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1