JavaServer Faces是Sun公司推出的一种Web用户界面框架,随J2EE的新版本Java EE 5一起发布。JSF的目标是简化Web开发,为此,Sun在JSF中提出了许多技术措施,其中包括UI组件、事件驱动和Managed Bean等等。本专题将以系列的形式,介绍JSF简化Web开发技术中具有代表性的几项技术,试图使读者对JSF技术有一个概括的了解,从而理解JSF是如何简化Web开发的。本文是系列的第一篇,从总体上介绍了JSF的技术特点。
1. JavaServer Faces简介
JavaServer Faces是Sun公司的一项技术,简称JSF。按照Sun公司的定义,JSF是Java Web应用的用户界面框架,其设计目标是简化Web应用的开发和维护。JSF对Web应用开发的简化,可以概括为四个方面:
第一,JSF提供了一组用户界面组件,这些组件是可重用的,程序员可以利用这些组件方便的构建Web应用的用户界面;
第二,利用JSF,在用户界面组件和业务逻辑之间传递数据将变得非常简单;
第三,JSF可以维持用户组件的状态,并且可以将状态从一个请求传递到另一个请求;
第四,JSF允许程序员非常容易地开发自定义的用户界面组件,而且这些自定义用户界面组件同样可以重用。
JSF技术的另一个重要特征是,JSF是面向工具的。JSF建立了开放的标准,工具厂商依据这个标准,可以为Web应用开发过程中的各个角色,提供强大的工具支持。例如,可视化的页面编辑器,可以给页面设计师提供“所见即所得”的功能,构建一个网页,只需简单地从面板中拖放一个个用户界面组件到网页上;又比如,JSF的页面导航也可以利用工具来操作,在A页面与B页面之间画一条连线,指定一个逻辑出口,就定义了从A页面到B页面的一个有条件的过渡。
如果你不愿意使用工具,或者某些工具暂时还没有,你也可以利用JSF来方便的构建Web应用。JSF向程序员开放了框架和编程模型的API,某些高级用户,例如核心程序员,可以利用这些API编写代码,以满足应用的某些特殊要求。比如说,在JSF中,用户界面组件和后台Bean是通过表达式语言来沟通的,JSF定义了表达式语言的标准语法,如果觉得这些语法不能满足应用要求,那么,程序员可以编写自己的表达式语言解释器,然后通过API用自定义的解释器替换默认的解释器。
JSF的专家组在开发JSF规范时,对Web应用进行了高度的抽象和归纳,这使得JSF的技术高度要远远高于眼下流行的其他Web框架。在规范级别,JSF的核心架构既独立于具体的传输协议,也与具体的标识语言无关。协议和语言的无关性,为JSF技术在其他领域的应用打下了坚实的基础。
当然,JSF最直接的服务对象,还是基于HTTP协议和HTML客户端的Java Web应用。Java Web应用运行在支持Servlet或JSP技术的Java应用服务器上,这些应用通常是基于表单的,由若干个页面组成,用户通过页面和表单访问Web应用所提供的功能。以现存的Java Web技术编写这样的应用,不是一件容易的事,程序员面临着许多难题,例如,如何跨请求管理用户组件的状态,如何封装不同浏览器的差异,如何处理表单,如何为客户端事件编写服务器端处理例程,如何验证请求数据的有效性,如何在请求字符串和后台对象之间转换数据类型,如何处理异常并给出适当的提示以及如何在页面之间导航等等。而JSF的目标,就是要解决这些难题。
2. 具有代表性的JSF简化Web开发技术
站在技术的角度,JSF是相当复杂的一个框架,因此,JSF技术的完整介绍,是一项“大工程”,其内容包括请求处理生命周期、用户界面组件模型、标准的用户界面组件、统一的表达式语言、托管bean机制、请求的上下文状态信息、页面导航方法、呈现模式、与JSP的集成以及生命周期管理等等。限于篇幅和时间,本文只是择其要点加以罗列,不能涉及JSF的所有细节,不过,即便是这样走马观花,也足以展示JSF技术在某些方面的领先性了。
要说明一项技术的领先性,最好的办法莫过于与其竞争对手进行对比。在Java Web编程中,JSF的最大对手无疑是JSP和Struts。前者是初级程序员的不二选择,而后者则是Java Web事实上的框架标准。不可否认,JSP和Struts都是优秀技术,不过,站在抽象思维的角度去考察这两种技术,就会发现,JSP和Struts的抽象层次都要低于JSF。
在Web应用的架构中,显然,Web Server位于抽象级别的最底层,直接处理Http请求和响应;Servlet在Web Server之上,具有会话管理、生命周期管理、基本的错误处理等功能;在Servlet之上的,就是JSP了,得益于它的可扩展的模板机制,JSP在抽象层次上比Servlet更上了一层楼;再往上,我们来到了Sturts,作为一个框架标准,Struts提供了非常丰富的服务,例如类型转换、导航、表单处理以及布局管理等;Struts是Model 2的,但同时也带着Model 1的某些特征,而抽象层次更高的JSF,则完全是Model 2的了,与Struts相比,JSF包含Struts的所有Model 2特性,更引入了Struts所不具备的用户界面组件、事件模式以及前台界面和后台业务逻辑的集成等。因此,JSF是比Struts抽象度更高的技术。
上面只是从总体上比较了JSF和JSP以及Struts技术,为了使这种比较更具体,同时让读者对JSF技术有一个大致的了解,本系列的后续文章中,我们将选择一些具有代表性的JSF技术点,来展开讨论,这些技术点包括:
◆JSF的用户界面组件模型
◆JSF的managed bean机制
◆JSF的事件驱动模式
◆JSF的导航方法
◆JSF的统一表达式语言
◆JSF的类型转换器
◆JSF的数据验证
◆JSF的数据表组件
◆JSF的选择组件
◆JSF的国际化特征
需要说明的是,这些不是JSF的全部技术点,之所以选择这些技术点进行介绍,是因为这些技术与JSF“简化Web开发”的目标有着最直接的联系。基于JSF的这些技术,在工具的支持下,程序员编写Web应用,将会是一个令人轻松愉快的工作。
【编辑推荐】