细说框架风云 JSF能否拯救WEB江湖(1)(2)
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的路注定是没有归途的。
Spring Web框架中一条黑马
2001年Rod Johnson编写一本书叫《J2EE设计开发编程指南》。 这本书的内容构成了Spring框架的雏形。接着Rod Johnson又编写了另外一本书《J2EE without EJB》,并同时推出Spring框架。这两本书迅速的在业界引起了轰动,为Spring的推出作了很好的铺垫。Spring引入IOC控制反转)的概念,采用POJO对象,AOP支持和轻量级容器来开发企业应用,这些正是业界多年来一直苦苦寻找的解决方案。Spring一推出就红遍了大江南北,迎来了Java企业开发的春天。
笔者认为Spring MVC 是基于请求响应模式最为优秀的开源WEB框架。它来自于Spring,天生就支持IOC 和AOP,这是其它任何WEB框架无法相比的。
Spring MVC 是一个很薄的WEB框架,它清晰的分离了数据和视图。支持多种视图技术(JSP,XML,EXCEL, PDF…)十分方便。
Spring的优势
◆Spring MVC对于表单提交类的应用提供了一个完整的生命周期。
◆Spring MVC 支持页面数据的原生绑定为POJO对象,并可以自定义扩展绑定器,而不是像Struts那样只能把页面数据自动绑定为String 类型。
◆Spring MVC 自定义行为变得十分容易,这得益于Spring框架良好的设计,Spring MVC的控制器也是基于Command模式的。
◆Spring MVC 有良好的数据校验框架,也很容易自定义数据校验行为。
◆Spring MVC 提供了一个良好的异常处理机制,可以方便的自定义各类异常的处理行为。
◆Spring MVC 提供了有用的标签。注意是有用的,没有用的Spring绝不提供)
◆Spring MVC 支持I18N及文件上传等。
◆Spring 还推出了Spring WEB Flow,用于向导式的WEB应用开发。
Rod Johnson 是一个JAVA EE专家,我更愿意称他为一个实践家。Rod Johnson 的经典语录是“不要重复发明轮子”,Spring 框架的各方面应用都来源于长期的实践经验,集百家之长,吸收其它框架的精华,正是Spring取得成功的原因。Spring MVC也是如此。Spring提供给你真实需要的,通过长期实践证明的东西。
虽然Spring 已经大红大紫了,但是Spring MVC却没有流行起来。它出来太晚了,而Struts已经深入人心了,Struts这么多年的表现一直不错,虽然Struts并不是那么优秀。但是它有着庞大的开发人群,关于Struts的资料是铺天盖地。企业很容易找到Struts开发人员,却难以找到Spring MVC开发人员。另外一个客观原因就是Spring太灵活了,Spring MVC也不例外,正因为Spring MVC过于灵活,致使初学者望而生畏。Spring MVC需要进行过多的XML配置,Spring MVC的文档相对比较少,所以现在Spring MVC的使用者有限,但无论如何,Spring MVC是一个非常优雅的WEB开发框架,花费一点学习成本是值得的。
用户点评