JavaServer Faces (JSF) 是一种用于构建 Web 应用程序的新标准 Java 框架。它提供了一种以组件为中心来开发 Java Web 用户界面的方法,从而简化了开发。JavaServer Faces 还引起了广大 Java/Web 开发人员的兴趣。“企业开发人员”和 Web 设计人员将发现 JSF 开发可以简单到只需将用户界面 (UI) 组件拖放到页面上,而“系统开发人员”将发现丰富而强健的 JSF API 为他们提供了无与伦比的功能和编程灵活性。JSF 还通过将良好构建的模型-视图-控制器 (MVC) 设计模式集成到它的体系结构中,确保了应用程序具有更高的可维护性。,由于 JSF 是通过 Java Community Process (JCP) 开发的一种 Java 标准,因此开发工具供应商完够为 JavaServer Faces 提供易于使用的、高效的可视化开发环境。JavaServer Faces 的 MVC 实现 JSF 的主要优势之一就是它既是 Java Web 用户界面标准又是严格遵循模型-视图-控制器 (MVC) 设计模式的框架。用户界面代码(视图)与应用程序数据和逻辑(模型)的清晰分离使 JSF 应用程序更易于管理。为了准备提供页面对应用程序数据访问的 JSF 上下文和防止对页面未授权或不正确的访问,所有与应用程序的用户交互均由一个前端“Faces”servlet(控制器)来处理。
1 JSF出现的背景和技术优势
使用Java开发Web应用程序经历了几个发展阶段。一开始是使用Servlet,直接利用requeST和response对象接收和响应客户端的请求。Servlet的一个显着缺点是需要在Java代码中嵌入大量的标记语言(如HTML),处理逻辑和显示逻辑严重耦合,非常不利于程序的维护和界面的设计。JavaServer Faces 的用户界面组件 JavaServer Faces 的真正威力在于它的用户界面组件模型。在该模型中,应用程序完全用组件集合构建,这些组件可以针对多种客户端类型用不同的方式来进行显示。与其他专有技术(如 ASP,Net)有点类似,JSF 的 UI 组件模型技术使开发人员能够使用预先构建的用户界面 (UI) 组件来构建 Web 用户界面(而非完全从头构建用户界面),从而提供了前所未有的开发效率。JSF UI 组件有多种形式,可以简单到只是显示文本的 outputLabel,或者复杂到可以表示来自数据集合(如数据库表)的表格化数据的 dataTable。
遵循MVC-Model2架构开发的应用程序框架(Framework)已有不少,例如当今比较流行的Struts、Tapestry、Turbine等。JSF的出现并不是要代替这些框架,相反,由于技术的着重点不同,JSF可以和这些Framework很好地协同工作。JSF基于JSTL技术,着力于解决现有框架不能完成的难题。
JSF的技术重点在View部分,它实现了Web应用程序设计角色的完全分离。JSF网页设计者只需要专注于页面的设计;应用程序开发者主要关心Model部分的JavaBean的开发。
JSF还可以根据不同的客户端标记语言做相应的调整,使Web应用程序能在的改动下适应不同的客户端类型,JavaServer Faces 规范在其参考实施中提供了一组基本 UI 组件,这些组件本身是非常有用的。它们包括两个组件库,即“HTML”组件库 — 它大部分映射了标准的 HTML 输入元素;以及“”库 — 它辅助常见的应用程序开发任务(如,国际化和验证/转换输入数据)。除了提供一个基本 UI 组件库之外,JSF API 还提供了扩展和创建定制 JSF UI 组件的功能,从而在基本组件之上提供更多功能。
其中JSF Core Library负责基本程序的运行,包括程序运行生命期控制、事件处理等。RenderKit把服务器端的UI组件转化成任何一种使用者界面标准,支持众多的标记语言。
为一个JSF网页的生命周期。只有送给java.faces.webap.FacesServlet控制器的HTTP请求才进入这个生命周期。在阶段1,系统根据JSF网页的内容建立一个组件树,根据组件树中每个组件的设定将对应的转换器(Converter)、验证器(Validator)以及事件处理函数(Event Handler)与特定组件关联,在阶段2中系统根据HTTP request的参数一一调用这些组件;然后分别在阶段3、4和5中执行参数验证、模型更新和事件处理;系统调用组件相应的方法将它们转化成适当的标签(HTML或者WML等)送到客户端。
2 JSF应用的一个简单实例
本例展现了使用JSF框架设计Web应用程序的步骤。程序功能是让用户在浏览器中输入用户名和密码登录,系统执行验证后返回登录结果。
2.1 视图设计
视图(View)部分包括login.jsp和response.jsp文件。前者是一个可以让用户输入登录名、密码进行登录的页面,后者用于返回用户的登录结果。所有的JSP文件都要加入以下二行,以引入JSF的自定义标记库:
<%@ taglib uri=″http://java.sun.com/jsf/html″prefix=″h″%>
<%@ taglib uri=″http://java.sun.com/jsf/core″prefix=″f″%>
其中login.jsp文件的主要代码如下:
username:
password:
注释部分说明了View是如何与Model和Controller关联的。
2.2 模型设计
JSF的模型主要用JavaBean来实现,这里定义了一个ValUser.java作为JavaBean,用于存储和处理页面传送的信息。
package myjsf;
public class ValUser{
public ValUser( ) { }
String username=null;
String password=null;
//此处省略bean属性username和password的getter
//和setter方法
// ……
String resultMessage=null;
public String getResultMessage( )//返回登录结果
{
if (isValid( ))
this.resultMessage=″valid user,welcome″;
else
this.resultMessage=″invalid user,please login again″;
return this.resultMessage;
}
public void setResultMessage(String resultMessage)
{ }
private boolean isValid( )//检验用户名密码是否合法
{
if (this.password.trim( )。equals(″123456″))
return true;
else
return false;
}
}
为了方便说明,这里简单地定义用户输入123456就是合法登录。实际应用中,应该使用JDBC或其他技术从数据持久层获取该用户的密码进行验证。
2.3 控制器设计和配置文件
JSF的控制器设计是在配置文件中完成的。首先需要配置Web应用程序的web.xml文件,加入以下内容:
以上内容表示只有对相对路径在login下的页面请求才交给JSF控制器处理,其他请求则不经过该控制器。JSF本身的控制文件是faces-config.xml,其中的navigation-rule节点定义了页面跳转流程控制,managed-bean节点定义了JavaBean的信息等,其他用户界面组件库 由于 JSF API 的丰富性和灵活性,许多 Java 开发人员开始创建新的 JSF 组件库和实现。
3 结 论
JSF框架较好地贯彻了MVC-Model2设计体系的思想,使页面表示和商业逻辑脱耦,让各类Web应用程序开发角色实现真正的各司其职。同时,JSF支持不同的客户端应用,使Web应用程序可以很容易地适应不同的客户端访问协议。JSF比较适合开发大型的Web应用程序。由于配置过程比较繁琐,待支持JSF的集成开发工具或插件发展成熟时,开发基于JSF的Web应用程序将会变得十分轻松和自然。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。