技术开发 频道

细说框架风云 JSF能否拯救WEB江湖



    Struts搅乱WEB格局
    Struts采用前端控制器模式和MVC模式进行设计。强制开发人员以MVC的理念来进行WEB开发,把表现层与业务层进行分离。Struts提供了丰富的标签库,在JSP 1.1时代,JSP页面都是通过JSP表达式进行编写。虽然采用“<%%>”的JSP表达式功能非常强大,但是调试十分的麻烦,理解也十分的困难,一般的页面人员几乎无法胜任。而Struts此时提供的标签库类似于HTML的标记,对开发人员更为友好,易于理解和编写。

    Struts提供了一个页面流程控制的功能,而不是把页面的转向写死在代码中。每个请求的页面输入和页面转发都配置在Struts-config.xml中。

    Struts支持自动数据绑定,通过一个ActionForm来实现。把页面的数据自动绑定成POJO对象。并支持数据检验。Struts 提供了国际化的支持,可以很容易的让你的WEB系统应用于多种语言版本的要求。

    所以Struts一推出就受到了开发人员的喜爱,并迅速流行起来。Struts是目前使用最多,流行时间最长的JAVA开源 WEB框架。

    尽管Struts取得了成功,但是它仍然有很多的不足。Struts线程是安全的,但对并发控制是一个问题。在JSP 2.0推出JSTL后。JSTL取代JSP表达式进行JSP编写,JSTL是一种类似C语言风格的标记语言。更为人们所熟悉,语法十分简单,明了,功能强大。JSTL会自动处理NULL问题,而不是像JSP表达式和Struts标签那样遇到NULL值是会抛出可恨的异常。相对于优雅的JSTL,采用Struts标签写出的JSP代码就像是天书,咒语一样。Struts大部份标记重复了JSTL的相似功能,有一部份与HTML重复的标签根本就没有必要存在,还无端的增加了学习和开发的难度。而且Struts标签不能良好的处理NULL问题。

    ActionForm的问题,Struts通过ActionForm来进行数据绑定和数据校验。首先任何需要使用数据绑定和数据校验功能都必须去继承ActionForm,而Action Form又依赖Servlet。这样基于类继承的藕合是没有必要的。数据绑定应该是原始的,就是说页面的数值型数据应该绑定成Java类的数值型数据,日期型数据就绑定成日期数据。而Struts只能把页面数据绑定成字符型的数据。数据校验应该是具有重用性的,而Struts却要把数据检验生硬的写在ActionForm中。
同时Struts也存在以下几点致命伤:

    1、Struts通过继承具体类来进行扩展,那么你要自定义Struts的行为而变得困难。
    2、Struts是不容易测试的,必须通过StrutsTestCase来进行辅助测试。而不是真正意义上的单元测试。
    3、Struts太面向JSP了,也就是说Struts仅支持JSP,如果我们的应用有些视图不是采用JSP,而另外一些视图如采用EXCEL和PDF。那么Struts是无能为力的。
    4、Struts框架对异常没有提供一个良好的支持。

    Struts也看到了自身存在的缺陷,并不断进行改进,随着Struts 2的到来,会带来一些改变的。

WEBwork是一种比Struts更易于使用,基于Command模式的开源WEB框架。WEBwork结构十分的简单,也提供了丰富的标签库,WEBwork的拦截器也十分的优秀。并且WEBwork是非线程的。WEBwork提供了一个IOC容器,支持国际化,并且支持多种视图技术。可以说WEBwork是一个非常优秀的WEB框架。但是WEBwork的开发文档少得可怜,它的客户端验证技术不太成熟,Velocity Templates技术还是太复杂,不提供对组件的封装,而Struts的Tiles更好一点。采用WEBwork,必须对它的运行机制十分了解。同时WEBwork对每个用户交互都强加Command模式,而不管是否需要。所有Command 的excute方法被迫抛出Exception,你无法知道哪一命令会抛出什么类型的异常,而且WebWork的路注定是没有归途的。
0
相关文章