- 浏览: 227327 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
thebye85:
引用 另外一个需要注意的问题,就是SessionMap和隐藏对 ...
WebWork深度探索之Session -
lanxiaoshuang:
写的真好
说的都是概念——有关编程范式 -
lhz:
grep unique wc你需要的只是这么几个小工具而已
努力做个Pragmatic Programmer
使用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被调用的代码即可以看出其简洁:
ActionProxy proxy = factory.createActionProxy("", "Login", null);
System.out.println(proxy.execute());
通过比较,我们可以发现这样的设计为我们的开发带来了莫大的好处,可是我又开始想了,如果不这样设计,或者说换了另外的设计,我们能够拥有如此好的可移植性、灵活性和可测性吗?
[1] WebWork深度探索之盲人摸象
发表评论
-
在String的面前丢脸
2004-06-18 00:39 1265重返C++的世 ... -
Summary of function parameter
2004-07-14 02:33 1141对C++这位入 ... -
此Vector非彼Vector
2004-08-05 15:51 1046在学习STL的过程中,我发现了一个熟悉的面孔— ... -
模板——泛型和STL的基础
2004-08-07 01:01 1327所谓泛型,从字面上可以猜想,就是泛化的类型(型 ... -
让人头痛的Vector(提问篇)
2004-08-07 16:55 1230在写完了此Vector非彼Vector这篇随笔 ... -
我该怎样shuffle呢
2004-08-10 01:47 1180在STL的Algorithm中有着这样的一种算 ... -
WebWork初体验
2004-08-11 17:43 1290在这篇ASP.NET ... -
WebWork深度探索之盲人摸象
2004-08-12 23:54 1130昨天尝试着利用WebWork做了一个小功能[1 ... -
WebWork深度探索之号外
2004-08-14 09:03 1041昨天开始对WebWork进行了一些初步的探索[ ... -
WebWork深度探索之标签库
2004-08-15 00:28 1531由于WebWork本身提供了一套自定义的标签库 ... -
什么是Law of Demeter
2004-08-15 14:22 1234今天一如昨日,继续对WebWork进行小打小闹 ... -
所谓的Dumb Question
2004-08-15 17:16 1035为了能够更 ... -
WebWork深度探索之标签库(续)
2004-08-16 15:58 1128昨日对WebWork的标签库进行了小小的研究[ ... -
建网站的小Tips
2004-08-20 23:58 1035这几天都在忙着做一个小网站,从网页美工到后台处 ... -
URL与RequestDispatcher
2004-08-21 23:58 1004今天照例继续自己的网站建设之旅,原本以为可以大 ... -
WebWork深度探索之Pitfall
2004-08-25 14:31 958在使用WebWork进行开发的过程中,她的种种 ... -
WebWork深度探索之Session
2004-08-26 15:38 1523昨天上午刚 ... -
搞笑的textarea标签
2004-08-31 18:17 1583很久没有用 ... -
两天四疑问
2004-09-03 10:56 9949月份的前两天,我仍然做着网站开发的工作。在开 ... -
MFC全接触(二)
2004-09-05 23:56 1292上一次和MFC邂逅,我和她谈得很投机。[1]分 ...
相关推荐
WebWork深入浅出:WebWork是一个由OpenSymphony组织开发的J2EE Web框架,专注于组件化和代码重用。它以其简洁、灵活和功能强大而著称,采用标准的Command模式实现,与web层分离。WebWork的核心组件包括Xwork,提供了...
WebWork深入浅出教程旨在帮助开发者全面理解并熟练掌握WebWork的核心概念和技术。 一、WebWork概述 WebWork的核心理念是提供一种更加灵活和强大的MVC架构,它强调代码的可重用性、可维护性和可测试性。相比Struts,...
### WebWork深入浅出 #### 一、引言 随着互联网技术的发展,Web应用程序的复杂度日益增加。为了更好地管理这种复杂性,开发者们引入了多种框架和技术来简化开发过程。其中,WebWork框架作为一款优秀的Java Web开发...
《深入解析WebWork框架:构建高效Web应用的基石》 WebWork框架,作为J2EE领域内备受推崇的Web开发框架之一,自诞生以来便以其卓越的性能、灵活性及易于集成的特点,在众多开发者中赢得了广泛的认可。《WebWork深入...
通过深入研究这些源代码,开发者可以更深入地了解WebWork的工作方式,并学习如何将其应用于实际项目中。对于想要学习Web开发或者对WebWork感兴趣的开发者来说,这个压缩包是一个宝贵的学习资料。
"webwork之HelloWorld篇"是入门WebWork框架的一个基本教程,通常包括创建一个简单的Web应用程序并展示“Hello, World!”的输出。 在Eclipse中创建一个Hello Web工程,首先你需要安装必要的插件,如JSTL和MyEclipse...
WebWork 是一个基于 Java 的开源 MVC(Model-View-Controller)框架,它在早期的 Web 应用开发中非常流行,尤其是在 Struts 1 之前。WebWork 提供了强大的动作(Action)处理、类型转换、拦截器(Interceptor)机制...
这个“webWork中文教程”旨在帮助开发者深入理解WebWork框架的原理、特性和实践方法。下面,我们将详细介绍WebWork的核心概念、主要功能以及如何通过学习文档来提升开发技能。 一、WebWork概述 WebWork是由Apache...
通过深入学习和理解WebWork2.0,开发者可以提升Web应用开发的效率,创建出高效、可维护的Java Web项目。提供的`WebWork2.ppt`文件应包含详细的PPT讲解,可以帮助读者更直观地了解WebWork2.0的各个方面,包括概念、...
通过对WebWork docs 2 的深入学习,开发者能够熟练掌握WebWork框架,从而更高效地构建企业级Java Web应用。这个文档集合是一个宝贵的资源,无论你是初学者还是经验丰富的开发者,都能从中获益。
此外,文档可能还会介绍一些最佳实践和常见问题的解决方案,帮助你深入理解和掌握WebWork2框架的使用。通过这份指南,你可以系统地学习和提升在WebWork框架下的开发技能,为构建高质量的Web应用打下坚实的基础。
WebWork是一个基于Java的MVC(Model-View-Controller)框架,它在早期的Web开发中扮演了重要的角色,尤其是在...通过深入研究WebWork,开发者可以了解到早期MVC框架的设计思想,同时也能提升自己的Java Web开发技能。
WebWork 是一个基于Java的MVC(模型-视图-控制器)框架,它在Web应用程序开发中被广泛使用。...对于希望深入了解WebWork或者想要构建这样的集成应用的开发者来说,这些jar包和相关的资源是非常宝贵的。
本指南将深入探讨WebWork2的基础知识、快速入门方法以及高级特性,以帮助开发者更好地理解和应用这一框架。 一、WebWork2基础知识 1. MVC模式:WebWork2遵循MVC设计模式,其中模型(Model)负责处理业务逻辑,视图...
在深入理解WebWork源码之前,我们首先需要了解一些基本概念。 1. **MVC模式**:WebWork基于MVC模式设计,它将应用程序的逻辑分为三部分:模型负责业务处理,视图负责数据展示,控制器负责接收请求并调用模型进行...
本指南将深入探讨Webwork2的核心概念、配置、以及实际开发中的应用。 **1. Webwork2 架构概述** Webwork2 的架构基于MVC设计模式,旨在分离业务逻辑、视图展示和用户交互。模型(Model)层负责处理数据和业务逻辑,...