快速业务通道

将Struts应用迁移到Struts 2(一) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18
Action都继承于Action基类。

所有的Action都必须是线程安全的,因为只产生一个Action实例。

因为所有的Action都必须是线程安全的,所有在Action处理过程中所需要的对象都必须以方法参数的形式传入。

处理Action所调用的方法必须命名为“execute”(在Struts中的DispatchAction类可以调用同一个Action的其它方法,但实际上在框架中的入口点仍然是“execute”方法)。

ActionForward结果是通过ActionMapping类中的方法来产生的,通常的做法是通过调用“findForward”方法。

相比较之下,Struts 2的Action提供了更简单的实现方式。下面就是个例子:

public class MyAction {   public String execute() throws Exception {      // do the work      return "success";   } }

首先你会注意到的是,Struts 2中的Action不再继承于任何类或需要实现任何接口。实际上,它还远不只这些。按照惯例,只有“execute”方法能调用Action, 但在Struts 2中并非必要,任何声明为public String methodName() 方法都能通过配置来调用Action。

另外,你会注意到返回的对象不是ActionForward,而是String。如果你不喜欢以字符串的形式出现在你的代码中,有个Helper接口Action可以以常量方式提供常见结果,如“success”、“none”、“error”、“input”和“login”。

最后,和Struts最大的革命性的不同是,处理Action过程中调用的方法(“execute”方法)是不带参数的。那你如何获取你所需要的对象呢?答案是使用“反转控制(Inversion of Control)”,也叫“依赖注入(Dependency Injection)”的模式(想更多地了解这方面信息请看Martin Fowler的文章http://www.martinfowler.com/articles/injection.html)。Spring框架使得这个模式流行起来,然而Struts 2的前身(WebWork)也在同时应用上了这个模式。

为了更好地了解反转控制,让我们来看看一个例子,如何在Action处理过程中可以访问到当前请求HttpServerRequest对象。

在我们的例子中,我们使用的依赖注入机制是接口注入。就如其名称一样,接口注入需要的是已经被实现了的接口。这个接口包含了相应属性的setter,为Action提供值。例子中我们使用了ServletRequestAware接口,如下:

public interface ServletRequestAware {    public void setServletRequest(HttpServletRequest request); }

当我们继承这个接口后,我们原本简单的Action看起来有点复杂了,但是这时我们可以获取HttpServerRequest对象来使用了。

public class MyAction implements ServletRequestAware {   private HttpServletRequest request;   public void setServletRequest(HttpServletRequest request) {      this.request = request;   }   public String execute() throws Exception {      // do the work using the request      return Action.SUCCESS;   } }

将Struts应用迁移到Struts 2(一)(4)

时间:2011-03-24

看起来现在这些属性是类级别的,并不是线程安全的,会出现问题。其实在Struts 2里并没有问题,因为每个请求过来的时候都会产生一个新的Action对象实例,它并没有和其他请求共享一个对象,所以不需要考虑线程安全问题。

现在我们还有最后一步,就是为这个Action关联上ServletConfigInterceptor拦截器。这个拦截器提供了一系列功能去获取HttpServletRequest,并可以把它注入到实现了ServletRequestAware接口Action中。这时你并不需要担心如何配置这些,我们将在下一篇文章中有具体讲述。最重要的是让我们明白到

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号