当你为服务器端应用开发用户界面时,你可以有很多选择,使用Jsp和Servlet的Java开发者一般使用HTML的用户界面组件来构建用户界面。这个主要是因为HTML的用户界面组件是所有的Web浏览器都支持的最小子集。当然,这样的Web应用与传统的独立胖客户端相比缺乏富有表现力的用户界面,因而功能更少,可用性也没有那么好。虽然applet可以用来设计出富有表现力的用户界面,不过Web页面的开发者可能并不精通Java程序设计。
另外,如果你参与一个大型Web系统开发的话,你可能会遇到一些技术上的难题,比如说如何实现一个查询构件或一个表浏览构件等数据库应用的组件等等等等。开发这些定制的组件需要专门的技术,而且要花一些时间来编译和测试新的库。在一个理想的情况下,开发者可以使用已经预先编译并且测试通过的,同时具有高度可配置性的组件来集成到自己的开发环境中。
JavaServer Faces 是一种可以开发富有表现力的用户界面的Web应用的服务器端技术,在它的帮助下,你可以解决像创建定制的用户界面组件这样的技术问题。这是因为, JavaServer Faces技术是一项开发运行在服务器端的Web应用程序的一个用户界面框架,它可以反过来向客户端提供用户界面。没错,用户界面的代码运行在服务器端,然而却可以响应客户端产生的各种事件。
其实现在已经存在多种可以开发富有表现力的用户界面的技术,比如Flash、 Swinglets和 Jade等。不过,这些解决方案都是专有的,而且开发工具一般也总是局限于某一个提供商。而JavaServer Faces最重要的就是它是一个标准,这意味着开发者不会被锁定到某一个单独的开发商。制定这个规范的专家组由Java开发社区的主要工具提供商的代表组成,这样开发者就不会缺乏可以选择的工具,而且他们可以使用现在使用的工具的最新版本。不过虽然各个开发商在制定规范的事情上相互合作,他们具体的实现却又相互竞争。这个就可以让开发者受益,他们可以使用工具商实现的各种特性,或是选择各种定制组件。
JavaServer Faces技术基于模型视图控制器(MVC)的把应用逻辑和表现相分离的思想,所以如果你理解MVC模式的话,你就可以真正理解JavaServer Faces技术。
本文是一个快速入门的教程,通过本文的学习,你可以开始使用JavaServer Faces 进行开发你自己的应用程序。同时本文还提供了一些其他的内容:
JavaServer Faces 技术的简介
使用JavaServer Faces 的好处
描述了JavaServer Faces内在结构
描述了JavaServer Faces技术的构成
通过一个使用JavaServer Faces 进行开发的例子,给你最直观的感觉
提供了一个例程,你可以修改一下用到自己的开发中
不过本文并没有包含如何开发定制组建的内容。
JavaServer Faces概览
JavaServer Faces是一项由Sun公司倡导的技术(其它相关可以参考JSR 127),它的主要目的是提供开发Web应用的用户界面的一个标准框架。如前所述,JavaServer Faces可以让你开发一个运行在Java服务器上的Web应用,它可以向客户端提供用户界面。这个技术使用Servlet作为控制器,提供了富有表现力的组件模型,实现了事件处理以及模型表现。从而提供了一个Web应用的生命周期管理。
JavaServer Faces有两个主要部分组成:
Java APIs用来提供UI组件、状态管理、事件处理和检查用户输入数据的功能。这些API同时支持国际化并且容易使用。
用来在一个JSP 页面内表现JavaServer Faces用户界面的JSP定制标记库。页面开发者可以通过这个标记库来开发丰富多彩的网页。
下图给出了客户端、服务器端和JavaServer Faces 之间的关系。
图1: UI 运行在服务器上
这里,这个JSP页面不是硬编码标记语言,而是通过使用JavaServer Faces定制标记库(tag library)来开发用户界面。应用程序的UI用来管理JSP页面所包含的组件对象。
很多人都可以享受到这项技术所带来的好处:
使用标记语言(比如HTML)的网页开发者可以使用JSP标记库开发出丰富多彩的JavaServer Faces 用户界面。
应用开发者可以专注于开发模型对象和进行事件处理。
组件开发者可以在JavaServer Faces 所提供组件的基础上开发新的定制组件。
工具提供商可以把JavaServer Faces 技术集成到新版本的开发工具中用来简化基于Web的多层应用的开发。
这项技术同时也打开了Web用户界面组件复用的市场。开发者和工具提供商可以像搭积木一样使用JavaServer Faces定制组件来构建用户界面。
JavaServer Faces 的一个优势就是使用模型、视图、控制器架构(MVC)来清晰地分离应用逻辑和表现。您可能会觉得这个可能会影响到那些使用现存Web框架技术比如 Struts的那些人。不过请注意,JavaServer Faces 和Struts并不是相互竞争的产品,事实上它们可以协作得很好。不过,JavaServer Faces确实比Struts有一些优势。举例来说,在Struts中,只有一种方式来表现一个元素,而JavaServer Faces却提供了多种方式来表现一个元素。选择适当的表现方式设计符合要求的表现是网页设计师的事情,应用开发人员并不需要知道使用哪一种机制来表示组件。(关于如何把JavaServer Faces 和Struts集成在一起,请参考integration of JavaServer Faces and Struts)事实上,读者可能已经注意到,Sun公司的Craig McClanahan就是Struts的作者,但他同时也是JavaServer Faces规范制定的头面人物。