微波EDA网,见证研发工程师的成长!
首页 > 通信和网络 > 通信网络业界新闻 > 细说框架风云 JSF能否拯救WEB江湖

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

时间:10-13 来源:IT168 点击:

  Java企业开发可以说是"复杂"的代名词,简化Java的开发已经刻不容缓了.随着JAVA EE 5,JAVA EE6的相继发布,从老虎到野马,版本更新如此之快,对SUN来说是史无前例的。Sun终于顶不住来自内部改革派和外部竟争者的压力。看来是下定决心简化JAVA了!

  在2005年底.Net 2.0的发布,我们目睹了.Net 2.0的成功。.Net 2.0由于开发简单,开发周期短,开发成本低,中小企业纷纷转投向.Net的怀抱。眼看JAVA EE的市场慢慢的被.Net蚕食,Sun是急在眼里,痛在心里。

  JSF也随之成为JAVA EE的规范,Java EE 6明显加强对JAVA开发桌面应用的支持,Sun也想让JAVA在桌面开发中占有一席之地。而把JSF作为强制规范,是想通过JSF来继续统领WEB 开发来固守企业应用的市场,2007年,Sun想通过JSF来打一个翻身仗。

  WEB江湖

  自Java 1995年面世后,Sun靠Applet 抢占了WEB前端市场,而Flash的出现却让Applet早早退出历史舞台。于是Sun在1997年发布了第一个WEB服务器(Java WEB Server)及应用的Servlet API。Servlet可以通过纯Java语言来编写企业WEB应用,Servlet从厂商急需角度出发,迅速的成为了企业应用解决方案的标准。

  虽然Servlet通过Java这种高级语言来进行编写,而最终是展示给用户的。需要有良好的用户界面。这就需要支持HTML等WEB脚本。可是Servlet却不能良好的嵌入HTML等前端代码,开发起来非常复杂。

  终于在1998年,Sun推出了JSP。而此时,与之相似的ASP已经发布了两年之久。
Sun在1999年初推出JSP 1.0后,又在1999年11月推出JSP 1.1,Sun终于凭借Servlet和JSP技术,迅速的占领了绝大部份的企业市场份额。在2002年4月,JSP发展到1.2版本。到2003年Sun推出JSP 2.0,同时推出的JSTL(JAVA 标准标记语言)取代JSP表达式的弱点,更进一步简化JSP的编写。 JSP慢慢变成一种非常成熟的WEB技术,JSP凭借其技术成熟,稳定,及Java的强大功能和跨平台能力成为WEB企业应用的王者,占领了80%以上的企业应用市场。而ASP则靠快速开发,方便发布以及依靠在微软的大树下分食中小市场和个人用户。

  江湖混战,框架兴起

  JSP是一项成功的技术,它功能强大,具有高稳定性和可靠性。但是也就意味着他具有复杂性,难以维护。从它诞生起,人们就一直在努力寻找一种快速的WEB开发方案。

  在早期,所有的业务方法,数据库连接,访问方法的这些代码都充斥在JSP页面里。开发人员既是UI设计者又是程序员。同时各种各样的业务代码写进JSP页面中,相同的功能代码可能需要编写多次,代码无法重用,如果后期因为业务的变动而进行维护时,对开发人员简直就是一场恶梦。

  随后WEB开发进入Model 2时代,也就是MVC模式的应用时代,MVC模式可以使模型,视图,控制分离出来。通过Servlet与JSP的结合,由控制器Servlet控制请求,调用业务类获得模型数据,并把数据模型展示到相应的视图(JSP)中。这样,业务方法已经从JSP中分离出来,减少了逻辑代码与JSP代码的藕合。JSP仅仅用于显示数据和提交用户的请求。Servlet控制用户的请求及调用Java类的业务方法,并对用户的请求进行转发。MVC模式可使得业务方法重用,使得页面开发人员和程序员进行分工。一部分人专注于页面的开发,而一部份人进行业务代码的编写。可以使项目组的人去做他最熟悉的工作。

  Model2的运用,对WEB开发带来了一次全新的变革,但是仍然面临着许多问题。有太多的Servlet类,一个请求对应着一个Servlet类。页面流程的控制全部通过硬代码写死在Servlet类中,每一个Servlet类都需要在WEB.XML中进行配置,不能很好的支持国际化等。后来人们通过前端控制器模式来解决了这样问题,就是由一个Servlet来响应所有的请求。根据不同的请求参数来调用不同的服务方法。这样有效的减少了Servlet类。几乎现在所有的WEB框架都是采用前端控制器和MVC模式的运用。在这样的背景下,WEB框架应运而生,Struts最先面世,WEBWork等纷纷涌现。开发者采用框架大大的简化了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的路注定是没有归途的。

  

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top