`

WebWork深入探索之初见端倪

阅读更多

        使用WebWork进行Web Application开发也有一个星期了,虽然对于WebWork框架本身的设计思路感觉还是一片模糊,但是我开始看到了一丝的光线。
        虽然在前文提出的问题[1],现在并没有一个很好的答案,但是在WAF和WebWork的比较之中,我发现了越来越多的差别。尽管这些差别并不是完全由两者设计的差异造成的,我想或多或少会有一定的联系。就让我们继续在比较中摸索前进吧。
        1、Action与HtmlAction之间最大的区别,就是Action更加的简单与纯粹。在Action中,我们根本看不到HttpServletRequest的痕迹,execute方法并没有包含任何参数,因此Action就是纯粹的业务逻辑主体,不搀杂任何其他无关的内容。而在HtmlAction中,perform方法的参数就是HttpServletRequest。这样的话,HtmlAction确如其名了,只能用在Web应用中,一旦改变了表示层,根本就没有办法实现移植。相比之下,Action由于没有和某种特定的表现技术绑定在一起,仅是业务逻辑的主体,就可以很容易的进行移植了。
        事实上,在WebWork中,httpServletRequest只是出现在了类ServletDispatcher中,但是呢,ServletDispatcher的工作只是将request包装了一下,并且建立一个extraContext,然后将extraContext作为一个重要参数传递给ActionProxyFactory类的createActionProxy方法,并且由这个方法返回了一个ActionProxy的实例,最后调用ActionProxy的execute方法,完成所有的操作。在这里,有三个地方需要做进一步的说明,一个是extraContext,一个是虚类ActionProxyFactory,而另一个则是createActionProxy方法。extraContext本身并没有什么特别的地方,它就是一个HashMap,在这个HashMap中,Context按照作用域的不同,分成parameterMap,sessionMap,ApplicationMap,requestMap等几个部分;ActionProxyFactory类承担着两个任务:创建ActionProxy和创建ActionInvocation,而createActionProxy方法担起了创建ActionProxy的任务——调用了实现ActionProxy接口的类(在这里是DefaultActionProxy)的构造函数;而创建ActionInvocation则是在构造函数中完成的,毕竟ActionInvocation的实例必须与一个ActionProxy实例相匹配。
        2、Action与HtmlAction相比,还有一个很重要的不同,就是通过Interceptor的使用,实现了一定程度的AOP。在HtmlAction中,我们通常都需要调用getParameter方法,将页面中form所包含的元素一个个从request中取出来,事实上这些代码重复是不必要的。在WebWork中,Action的调用是由ActionInvocation去完成的,但是在Action被调用的过程使用了Interceptor(拦截器),由Inteceptor去完成在大多数Action被调用过程中都需要处理的逻辑。这好比在Action被调用这个纵向过程中增加了若干个横向切面,这就是AOP的一个基本思想。再回到刚才所说的从request中获得form所包含的元素的例子,在WebWork中,我们看不到getParameter的身影,说实在的,刚开始我还真的不习惯,还担心我需要的元素是不是真的取到了呢。我的担心根本就是多余的,在Action被调用之前,或者说是在ActionInvocation的invoke方法被调用之前(Action中的execute方法是在invoke方法中被调用),ParametersInterceptor就已经帮我们做好了这样烦琐的事情了。我们所需要做的就只剩下在Action中增加与页面中form所包含的元素对应的setter方法即可。
        3、Action与HtmlAction相比,从测试的方便程度来看,很明显Action更加易于测试。象以前在做HtmlAction的测试的时候,我不得不模拟一个HttpServletRequest作为参数传递给perform方法,而在Action的测试当中,根本就不需要这样。我们从Action被调用的代码即可以看出其简洁:

ActionProxyFactory factory = ActionProxyFactory.getFactory();
ActionProxy proxy 
= factory.createActionProxy("""Login"null);
System.
out.println(proxy.execute());    

        通过比较,我们可以发现这样的设计为我们的开发带来了莫大的好处,可是我又开始想了,如果不这样设计,或者说换了另外的设计,我们能够拥有如此好的可移植性、灵活性和可测性吗?

        [1] WebWork深度探索之盲人摸象

分享到:
评论

相关推荐

    WebWork深入浅出

    WebWork深入浅出:WebWork是一个由OpenSymphony组织开发的J2EE Web框架,专注于组件化和代码重用。它以其简洁、灵活和功能强大而著称,采用标准的Command模式实现,与web层分离。WebWork的核心组件包括Xwork,提供了...

    WebWork深入浅出.rar

    WebWork深入浅出教程旨在帮助开发者全面理解并熟练掌握WebWork的核心概念和技术。 一、WebWork概述 WebWork的核心理念是提供一种更加灵活和强大的MVC架构,它强调代码的可重用性、可维护性和可测试性。相比Struts,...

    webwork深入浅出

    ### WebWork深入浅出 #### 一、引言 随着互联网技术的发展,Web应用程序的复杂度日益增加。为了更好地管理这种复杂性,开发者们引入了多种框架和技术来简化开发过程。其中,WebWork框架作为一款优秀的Java Web开发...

    webwork深入浅出学习资料

    《深入解析WebWork框架:构建高效Web应用的基石》 WebWork框架,作为J2EE领域内备受推崇的Web开发框架之一,自诞生以来便以其卓越的性能、灵活性及易于集成的特点,在众多开发者中赢得了广泛的认可。《WebWork深入...

    webwork-1.4-src.zip_webwork_webwork s_webwork.zip_webwork1.4.zip

    通过深入研究这些源代码,开发者可以更深入地了解WebWork的工作方式,并学习如何将其应用于实际项目中。对于想要学习Web开发或者对WebWork感兴趣的开发者来说,这个压缩包是一个宝贵的学习资料。

    webwork之HelloWorld篇

    "webwork之HelloWorld篇"是入门WebWork框架的一个基本教程,通常包括创建一个简单的Web应用程序并展示“Hello, World!”的输出。 在Eclipse中创建一个Hello Web工程,首先你需要安装必要的插件,如JSTL和MyEclipse...

    WEBWORK

    WebWork 是一个基于 Java 的开源 MVC(Model-View-Controller)框架,它在早期的 Web 应用开发中非常流行,尤其是在 Struts 1 之前。WebWork 提供了强大的动作(Action)处理、类型转换、拦截器(Interceptor)机制...

    webWork

    这个“webWork中文教程”旨在帮助开发者深入理解WebWork框架的原理、特性和实践方法。下面,我们将详细介绍WebWork的核心概念、主要功能以及如何通过学习文档来提升开发技能。 一、WebWork概述 WebWork是由Apache...

    WebWork2.0讲解说明

    通过深入学习和理解WebWork2.0,开发者可以提升Web应用开发的效率,创建出高效、可维护的Java Web项目。提供的`WebWork2.ppt`文件应包含详细的PPT讲解,可以帮助读者更直观地了解WebWork2.0的各个方面,包括概念、...

    WebWork docs 2 -- webWork 详细的说明文档

    通过对WebWork docs 2 的深入学习,开发者能够熟练掌握WebWork框架,从而更高效地构建企业级Java Web应用。这个文档集合是一个宝贵的资源,无论你是初学者还是经验丰富的开发者,都能从中获益。

    webwork

    此外,文档可能还会介绍一些最佳实践和常见问题的解决方案,帮助你深入理解和掌握WebWork2框架的使用。通过这份指南,你可以系统地学习和提升在WebWork框架下的开发技能,为构建高质量的Web应用打下坚实的基础。

    webwork_框架文档

    WebWork是一个基于Java的MVC(Model-View-Controller)框架,它在早期的Web开发中扮演了重要的角色,尤其是在...通过深入研究WebWork,开发者可以了解到早期MVC框架的设计思想,同时也能提升自己的Java Web开发技能。

    webwork的jar包

    WebWork 是一个基于Java的MVC(模型-视图-控制器)框架,它在Web应用程序开发中被广泛使用。...对于希望深入了解WebWork或者想要构建这样的集成应用的开发者来说,这些jar包和相关的资源是非常宝贵的。

    webwork2开发指南

    本指南将深入探讨WebWork2的基础知识、快速入门方法以及高级特性,以帮助开发者更好地理解和应用这一框架。 一、WebWork2基础知识 1. MVC模式:WebWork2遵循MVC设计模式,其中模型(Model)负责处理业务逻辑,视图...

    webwork源码底层实现

    在深入理解WebWork源码之前,我们首先需要了解一些基本概念。 1. **MVC模式**:WebWork基于MVC模式设计,它将应用程序的逻辑分为三部分:模型负责业务处理,视图负责数据展示,控制器负责接收请求并调用模型进行...

    Webwork2开发指南

    本指南将深入探讨Webwork2的核心概念、配置、以及实际开发中的应用。 **1. Webwork2 架构概述** Webwork2 的架构基于MVC设计模式,旨在分离业务逻辑、视图展示和用户交互。模型(Model)层负责处理数据和业务逻辑,...

Global site tag (gtag.js) - Google Analytics