将Struts应用迁移到Struts 2(一) - 编程入门网
Action都继承于Action基类。
所有的Action都必须是线程安全的,因为只产生一个Action实例。 因为所有的Action都必须是线程安全的,所有在Action处理过程中所需要的对象都必须以方法参数的形式传入。 处理Action所调用的方法必须命名为“execute”(在Struts中的DispatchAction类可以调用同一个Action的其它方法,但实际上在框架中的入口点仍然是“execute”方法)。 ActionForward结果是通过ActionMapping类中的方法来产生的,通常的做法是通过调用“findForward”方法。 相比较之下,Struts 2的Action提供了更简单的实现方式。下面就是个例子:
首先你会注意到的是,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接口,如下:
当我们继承这个接口后,我们原本简单的Action看起来有点复杂了,但是这时我们可以获取HttpServerRequest对象来使用了。
将Struts应用迁移到Struts 2(一)(4)时间:2011-03-24看起来现在这些属性是类级别的,并不是线程安全的,会出现问题。其实在Struts 2里并没有问题,因为每个请求过来的时候都会产生一个新的Action对象实例,它并没有和其他请求共享一个对象,所以不需要考虑线程安全问题。 现在我们还有最后一步,就是为这个Action关联上ServletConfigInterceptor******。这个******提供了一系列功能去获取HttpServletRequest,并可以把它注入到实现了ServletRequestAware接口Action中。这时你并不需要担心如何配置这些,我们将在下一篇文章中有具体讲述。最重要的是让我们明白到 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |