WebWork In Action学习笔记(一) WebWork的概貌 - 吾将上下而求索...

来源:百度文库 编辑:神马文学网 时间:2024/05/03 14:53:53
WebWork In Action学习笔记(一) WebWork的概貌
开始整理WebWork学习笔记,一来融入一些自己的观点以备忘,二来给Team里兄弟们快速学习和上手的捷径,提高工作效率。不过总的来说希望能从它学到的思想多过与如何用它,也希望大家一起讨论一起分享。
严重同意Rickard(WebWork的创造者 JBoss创始人之一 大牛)在创造这个框架时所基于的几个哲学原则:实现某个功能的正确方式应该是最简单的;阻碍最少的途径应该是正确的;在过于复杂和功能简陋之间应该存在一个很好的平衡点。我想但凡框架都应该带着这些原则去创造和运用,让工作变得更加简单。后面将会讨论什么是框架什么是容器,我想你会对这些哲学理解的更加深刻。
WebWork是一个优雅的框架,它的设计基于这样一个基本原理:完成通用任务应该是简单的,而构建高级的设计也应该是可行的。WebWork的开发者只想提供一个能够为你工作的框架,而不是一个与你作对的框架。
一、关于大家熟知的MVC
众所周知MVC(Model-View-Controller)已经成为在Web应用程序开发中具有统治地位的构架了,而WebWork可以说是目前最为优雅和强大的MVC框架,同时也提供了一个拥有许多特征的微容器供你使用。下面就先来讨论一下MVC。
最早的MVC是在SmallTalk语言中提出的,现在已经被广泛的运用在Web应用程序开发中。经典的MVC模式事件流是这样的:用户与视图(View)进行交互,填入数据点击按钮,控制器(Controller)接受到来自视图的时间并对模型(Model)进行操作,根据用户提供的数据更新模型。视图也会接到“模型改变”的事件通知,因此它会随着模型更新,将模式的更新结果显示给用户。但是由于HTTP协议的特殊性这种形式在Web程序中是无法实现的。
在Web应用程序中经典的MVC是通过前端控制器(Front Controller)模式实现的。这种模式包含一个分发器,而分发器将请求URL映射到需要被执行的命令实例(action)。命令实例再与系统后台服务进行交互,通常这些服务就理解为模型。命令实例在处理完业务逻辑后返回一个码值,而这个码值被映射到一个视图。最后结合控制器和模型,视图将会呈现给用户。通常视图会使用标签库,以便更简单的访问需要显示的数据。还有一种MVC的实现,称之为页面控制器(Page Controller),在这里可以找到一些资料http://www.microsoft.com/china/MSDN/library/architecture/patterns/esp/EspWebPresentationPatterns.mspx,本篇暂不讨论。
二、不用WebWork也一定要理解的内容---何为框架、何为容器,它们到底有什么用?
1.框架
最近经常听到朋友们对框架会有两种声音,一种是盛赞框架,声称有了框架天下无敌,开发效率翻番,开发效果加倍等等;另一种则是极其厌恶,太多配置,太多限制,太多不同意,有意加大学习坡度,加大升级的难度,加大大家的工作量等等。(甚至有人在BeanSoft兄的blog里说再也不看他的所有文章,只因他发了一下框架的牢骚)渐渐的大家都有了一种框架情节,一边是崇拜而另一边则听到框架就头疼(框架岂不沦落到超女一样的下场,不该不该)。框架实在不该背负这么多,大家在选择使用或不使用框架前都必须知道何为框架,何为容器,它们到底有什么用?
Rickard在构建最原始版本WebWork的时候曾经说过:框架的强大之处不是源自它能让你做什么,而是它不能让你做什么。理解为:框架使混乱的东西变得结构化。而Web应用程序框架则鼓励开发人员使用一系列框架所提供的基础类和类库避免杂乱的JSP,servlet所带来混乱。
Struts曾经红极一时,即使使现在在国内也使使用者最多的框架之一。但它现在受到越来越多的质疑,最后不得不选择和WebWork合并来期待扭转乾坤。主要是因为随着时间的推移,开发者越来越成熟,应用程序也越来越成熟,而Struts太多地方限制的过于严格,一些实现的方式过于别扭和死板,从最开始的给予很多结构化的东西从而使开发者很具安全感,到现在的过分限制创造力而成为开发者的梦魇。也正如框架的悲观派BeanSoft兄所说是它开创了通过大量杂乱无章的配置文件来做程序的先河(没有考证,呵呵)。
WebWork是鼓励创造的。WebWork找到了框架结构和创造力之间的一种平衡,在后面的笔记中你将体会的更深。
2.容器
框架定义了不能做什么,而容器则定义了可以或者说能够做什么。比如说Web容器有的支持servlet2.2有的则支持了servlet2.4,有的提供了良好的启动和运行速度,有的则提供了更好的集群计算能力。一个容器拥有越多有用的特性,它将越强大、越好。容器支持我们去做一些事情,我们也需要它的支持!注意前面说过框架则是限制我们去做一些事情。
WebWork提供了自己的轻量级容器,你可以从容器中获得诸如IoC、AOP等一系列的特性支持,使你从中受益。当然必须说明的是WebWork的核心是MVC框架,而并非这个轻量级容器,甚至它是一个可选的部分。但要想构建出迷人、优雅的Web应用程序,发挥更多的创造力,你可能离不开它并会真的爱上它。
上面提到WebWork的容器是一个可选的部分,它是松耦合的,所以你完全可以选择你更熟悉和信耐及更适合当前项目的容器(如Spring、PicoContainer等)来提供相关特征。
最后我们来提一下WebWork的核心,一个底层组件---XWork,它是一个比WebWork更单纯更轻量级的框架(我觉得不太准确,不过暂且称它做一个框架吧)。在这里并不打算讨论它,因为对于刚接触WebWork的开发者来说,XWork和WebWork这两个词的相似必定带来很多的混乱。如果有兴趣可以google一下,查找XWork的相关资料来学习。
在下一篇我们将一步一步的完成一个HelloWorld程序(想必大家学习其他技术也都离不开经典的HelloWorld吧),从而对WebWork的基础内容有一个大概的了解。我们在你的第一个WebWork程序里见吧!