1.2.2 容器能够做什么
框架通常定义了它们本身不能做什么,而另一方面,容器则在大多数情况下定义它们自己能够做什么。让我们来看一下绝大多数Web应用程序开发人员都十分熟悉的容器——Servlet容器。现在有许多不同的Servlet容器可供选择:Tomcat、Orian、Resin、WebLogic和WebSphere,等等。它们在很多方面都有区别:成本、性能和支持等。但是抛开商业的因素不谈,每一个容器都提供了它们所特有的增值特性。一些容器提供的集群计算要比其他的好;而另一些则为开发者提供更好的支持;一些支持Servlet 2.3的规范,而另一些则支持更新的Servlet 2.4的规范。关键是容器的设计是为了装入你的代码并且为代码提供特有的特性。一个容器拥有越多有用的特性,则该容器越好。那么当我们说WebWork既是一个框架又是一个容器意味着什么呢?
1.WebWork的轻量级容器
Servlet容器提供了规范要求的特性,或者说提供了容器开发人员所实现的特性。其他J2EE容器,像EJB容器亦是如此。而轻量级容器则不同,它让你可以为一个基本的容器增加新的特性,使其符合你的应用程序的需求。
让我们来考虑一个更具体的例子。假设你不使用EJB,但你又希望为参与项目开发的程序员提供简单的事务支持,那么你可以将事务支持特性加入到轻量级容器中,使装入容器的项目随之受益。现在,你就拥有一个独一无二的提供EJB某些优势的容器了。当你开始专门为应用程序提供一些EJB和其他规范想都不敢想的特性时,这将变得越来越有趣。
WebWork除了是一个MVC框架之外,还是一个小巧的轻量级容器。它让你可以创建以上所提到的这些特性,让其他程序员从你所构建的独一无二的容器中获益,从而降低开发难度。在第6章“控制反转”中,我们将向你展示如何利用WebWork的容器为你的开发团队提供高度自定义的解决方案。
2.竞争对手
WebWork并不是唯一的轻量级容器,还有其他诸如Jakarta HiveMind(此前的Jakarta Avalon)、PicoContainer和Spring可供选择。虽然每个容器各有不同,但是它们都设法提供相同的东西:一个简单的可配置环境,在里面可以存在各种对象,并且对象间相互独立且易于管理。然而,这激动人心的轻量级容器只是在最近才得到认可。
|
|
我们向您推荐《Spring in Action》(Craig Walls著),您可以从中获得更多有关Spring的知识。(Manning Publications,2005年,www.manning.com/ walls2)。 |
让我们暂时回到有关框架的讨论中来,你一定还记得在提供过多或者过少特性之间有一个非常微妙的平衡吧。虽然WebWork一并提供了它自己的轻量级容器,但是它仍然可以插入其他不同的容器。这意味WebWork的框架与PicoContainer一起使用是没有任何问题的。
从纯技术的角度来说,WebWork的容器并不是WebWork的核心部分,甚至被认为是一个可选的部分。由于不存在紧密的耦合,所以使用其他候选的容器来替换WebWork的容器并与WebWork框架部分集成是十分简单的,而且WebWork通过对interceptor(拦截器)的支持来实现这些集成方式。在第5章“使用interceptors增加功能”中,你将会了解到interceptor在保持框架不变的情况下,如何为你的应用程序提供强大的功能和极强的伸缩性。
如果你了解了WebWork的发展历程,你会更好地认识到WebWork的容器和框架之间的不同。让我们花一些时间来回顾一下WebWork的历史及围绕它形成的社区,这样你将了解到WebWork的核心部分——XWork源自哪里,什么时候增加了控制反转容器,以及增加的原因。







