软件的展示层(presentation layer)是最麻烦的。以网络应用为例,软件的最终输出,须以符合HTML的要求。此外,尚需对HTML元素进行修饰和定位,这就用到了CSS技术。如果进一步,可能还需要用到DHTML和Ajax。也就是说,还需要应用JavaScript技术。
而网络框架的功能主要有两个:
1.把程序数据以后台软件组件(如ActionBean等)的形式注入到展示层,同时把展示层传入的用户动作导入到后台组件,激活业务处理等;
2.提供页面浏览定义功能。简单的说,就是把展示层与后台组件合理有效地组合到一起。
这就出现了一个问题,由于展示层用到了较多的技术,网络框架应该尽可能保持透明,不要扭曲甚至掩盖了这些基本技术。然而Struts、JSF等显然没有满足这一要求,它们提供了太多的标签(tag lib),它们不知道Tags就是API。大家学习HTML Tags是心甘情愿的,因为HTML是标准和通用的;但学习个别框架的tags就很抵触。如果打开一个JSP源代码,里面到处都是框架的tag,这就太让人头痛了。可以想象,这个公司用Struts,那个公司用JSF,对于开发人员来说将是多么痛苦的一件事,这是两套API啊!
另一个突出的问题便是配置文件。自从XML兴起,配置文件就成了第一头痛的问题。可以说,XML不论是对人还是对机器,都是不友好的。但Java社区过去片面追求灵活性(flexbility),低耦合(loose coupling)及其它诸多不切实际的华丽词藻,XML配置文件满天飞。以Struts为例,你可能要配置Form数据,navigation数据,validation数据等等。你可以想象,一个中等规模的网络应用的相关配置文件将会是如何庞大。这还没有记入后台其它组件的配置文件。这就会给你一种感受:写代码容易,让J2EE程序转起来难,弄好配置文件更难。有人感叹过:我们是用Java写程序还是用XML来写程序?!
如果留心观察,Spring的兴起,无非是借了EJB2的东风。因为后者太繁琐了,尤其是配置问题和资源注入方式。而EJB3的兴起,则是实事求是,总结了EJB2的经验,吸取了Spring的优点。EJB3最显著的改进便是将XML配置文件去除!而用annotation取而带之,并提供合理的缺省值。
很明显,下一个成功的网络开发框架,必然要在透明度、配置、后台资源注入等方面有一个质的飞跃。这当然需要广泛采用annotation技术。另一个最重要的要求,就是力求“简单”。
好了,说了半天,似乎没有涉及Stripes,其实不然。Stripes在配置(不需要自己的配置文件)、资源注入、validation、透明度等诸多方面均令人满意,而且很容易与EJB3或Spring等结合。Stripes的tag及annotation的数量很少,也很容易上手。
Stripes:是一个视图框架用于利用最新的Java技术来构建Web应用程序.它具有以下特点:不需要对每一page/action进行映射配置(ActionBeans将自动被发现,它利用注释进行配置),强大的绑定引擎用于构建复杂并脱离请求参数(request parameter)的web对象,易于使用并可本地化的验证与类型转换系统.可重复使用ActionBean作为视图帮助类.支持一个form对应多个事件.透明的文件上传能力.支持持续开发(比如在构思你的ActionBean之前可以先构建与测试JSP)等.