1.1 JSF介绍
1.1.1 何谓JSF
JavaServer Faces(JSF)是一种标准的J2EE表示层技术,其主旨是为了使Java开发人员能够快速的开发基于Java的Web应用程序。它不同于其它Java表示层技术的最大优势是其采用的组件模型及事件驱动技术,并且和其它的MVC框架相比,它是一种Java标准,在Java EE 5中,JavaServer Faces1.2正式作为一个标准,加入Java Enterprise的世界。
JSF的主要优势之一就是,它既是Java Web用户界面标准,又是严格遵循模型-视图-控制器(MVC)设计模式的框架。用户界面代码(视图)与应用程序数据和逻辑(模型)的清晰分离使JSF应用程序更易于管理。为了准备提供页面对应用程序数据访问的JSF上下文和防止对页面未授权或不正确的访问,所有与应用程序的用户交互均由一个前端“Faces”Servlet(控制器)来处理。JSF的MVC结构如图1-3所示:
图1-3 JavaServerFaces的MVC实现
传统的Web应用程序与桌面应用程序存在着许多本质上的差别,使得用户要手工的去捕获各种浏览器请求,保存客户端状态,并且手工控制着页面的转向,等等。JSF的出现,无疑给我们带来了巨大的便利,JSF提供了事件驱动的页面导航模型,该模型使应用程序开发人员能够设计应用程序的页面流。
在真正开始学习JSF之前,我们很有必要再谈谈一个在前Web时代的流行词汇——(Rapid Application Development,简称RAD)。RAD的主要目标是使你能够使用大量可重用的组件来构建强大的应用程序,如我们所熟悉的Visual Basic、PowerBuilder、Delphi之类的工具。
使用这些工具很容易用拖拉拽等方式将我们需要的组件放到应用程序中,这样只需要很少的代码、甚至不需要代码就可以快速地创建用户界面(UI)。另外,不管是对于经验丰富的程序员还是刚刚接触编程领域的新手来说,都可以使他们立竿见影的得到开发结果。
遗憾地是,Web开发领域对RAD的采用异常缓慢。这种缓慢的原因在于对不简单、不一致的应用创建简单、一致的视图本身的复杂性。与标准的桌面应用程序相比,Web应用要复杂的多。有太多的资源需要管理——页面、配置文件、图像以及代码。用户可能使用运行于不同操作系统上的不同类型的浏览器。而且还不得不应对HTTP,这是个非常难以构建复杂系统的协议。
1.1.2 JSF对Web开发的简化
JSF对Web应用开发的简化,可以概括为四个方面:
(1)JSF提供了一组用户界面组件,这些组件是可重用的,程序员可以利用这些组件方便的构建Web应用的用户界面。
(2)利用JSF,在用户界面组件和业务逻辑之间传递数据将变得非常简单。
(3)JSF可以维持用户组件的状态,并且可以将状态从一个请求传递到另一个请求。
(4)JSF允许程序员非常容易地开发自定义的用户界面组件,而且这些自定义用户界面组件同样可以重用。
1.1.3 JSF与Struts
Struts和JSF同属于表现层框架,分属于不同性质的框架,JSF是一种事件驱动型的组件模型,而Struts是单纯的MVC模式框架。下面我们对比着来看一下两者的优缺点。
JSF从包括Struts的少数框架发展而来。Struts的创建者Craig McClanahan,即是JSF规范的领导人之一。因此,能看到Struts和JSF之间的一些相似之处,这并不是偶然的。JSF的主要目的之一就是使得J2EE Web应用程序在RAD工具下易于开发。同样地,它也引入了丰富的组件模型。
1.JSF有以下优点:
l JSF是一个来自Sun®的规范,将会被包括在J2EE规范的未来版本之中。各主要供应商都保证对JSF提供强力支持。
l JSF使用Page Controller Pattern,因此会对页面密集型应用程序有帮助。相应组件会对来自页面上组件的事件做出响应。
l JSF有一个明确定义的请求生命周期,保证了在不同级别上的可插入性(plugability)。
l 可插入性的一个有力的例子是构建您自己的render工具包。将框架中的呈现(rendering)部分和控制器部分分离的能力实现了良好的可扩展性。组件供应商可以编写他们自己的工具包以处理不同的标记语言,如XML或WML。另外,render工具包也不依赖于JSP。
l 因为JSF有一个丰富的组件模型,所以它支持RAD类型的开发。现在可以使用拖放技术来构建Web页面。此外,JSF提供了在不打破层次布局的条件下,将可视组件同后台模型组件连接起来的途径。
2.Struts有以下优点:
l Struts是一个成熟的、被证实了的框架。它已经使用了几年,且被成功部署到许多项目中。WebSphere Application Server管理控制台就是一个Struts应用程序。
l Struts使用Front Controller和Command模式,可以处理复杂的控制器逻辑。
l 除了核心的控制器功能以外,它还有很多其他的优点,比如使用Tiles布局、说明性(declarative)异常处理以及国际化。
3.JSF有以下缺点:
说了两者这么多优点之后我们再来看一看它们不足的地方。
l JSF是相当新的并处于发展过程中。要看到成功的部署和广泛的应用还需要一段时间。另外,组件供应商可能并不能做您想让他们完成的所有事情。
l 手工方式的JSF并不比Struts简单。它的目标更倾向于RAD。那些喜欢手工开发的人(例如,那些不喜欢IDE的vi类型的人)可能会发现Struts更容易开发。
l Struts导航可能会更加灵活一些,但同时也导致控制器逻辑更加复杂。
4.Struts有以下缺点:
l Struts是以JSP为中心的,必须使用其他框架来适应其他视图技术。
l 尽管Struts有丰富的标记库,但是它只能帮助进行控制器方面的开发,当您处理关于页面的组件时,它没有任何意义。因此,从视图的角度来看,它没有提供好的工具。
l Struts需要关于Java的知识。其目的是帮助Java开发人员,而不是隐藏Java。它在对Web开发人员隐藏Java语言的细节这一方面做的并不好。
l ActionForms被程式化的与Struts框架链接。因此,为了降低模型的耦合度,您需要编写传送代码或者在输入时使用工具将数据从ActionForms移动到Model。
5.最后看一下两者的流行程度
考察某项技术的流行程度,google的关键字搜索不失为一种简便易行的方法。为了便于说明,我们将Struts与JSF进行比较。在google中分别输入关键字“Struts”和“JSF”,看看google返回的网页数量。令我们感兴趣的不是网页的绝对数量,而是JSF网页数量与Struts网页数量的比值。我们看到,对于英文网页,这个比值是1.0,日文网页是1.0,繁体中文网页是0.75,而简体中文网页只有0.55。表1-1列出了具体的数据和比值。
表1-1 Struts与JSF的比例
英文网页数量(万)
|
日文网页数量(万)
|
繁体网页数量(万)
|
简体网页数量(万)
|
JSF
|
Struts
|
JSF
|
Struts
|
JSF
|
Struts
|
JSF
|
Struts
|
132
|
138
|
109
|
106
|
9
|
12
|
77
|
140
|
JSF/Struts=1.0
|
JSF/Struts=1.0
|
JSF/Struts=0.75
|
JSF/Struts=0.55
|
虽然这样的比较方法不够严谨,但0.55的比例从一个侧面说明JSF在国内还没有流行起来,用“方兴未艾”四个字来描述JSF的这种状况,是再合适不过了。由于历史的原因,国内的软件技术一直亦步亦趋地跟着国外跑,这不是我们希望的,但我们不得不承认。因此,从国外的情况来推论,我们有理由相信,JSF必将成为国内程序员追捧的对象。正如某位哲人说的那样,JSF是早晨八、九点钟的太阳,希望寄托在JSF身上。
1.2 JSF相关的技术
所有的JSF应用都是标准的Java Web应用。Java Web应用通过Servlet API和其他显示技术(如JSP)来运行超文本传输协议(HTTP)。显示技术用来定义与Java代码交互的组件所组成的UI。JSF组件架构使用JavaBean来暴露组件和处理事件。在这一节我们将讲述这些技术,并解释它们和JSF之间的关系。
1.3.1 HTTP
HTTP(Hypertext Transfer Protocol超文本传输协议)是应用层协议,由于其简捷、快速的方式,适用于分布式和合作式超媒体信息系统。自1990年起,HTTP就已经被应用于WWW全球信息服务系统。
关于协议我们要有这样一个简单的认识。比如,为什么用中文写的语句大家能看懂呢?答案很简单,能看懂。因为我们都遵守了汉语语法的这样一个协议。在编写的时候是按照这个协议规范写的,而在阅读的时候也是按照这样一个协议去阅读的,这样编写的语句大家才能看懂。然而把这些文章给一个外国人去阅读呢,那么他未必能够看懂,因为他不熟悉汉语的语法协议。
HTTP报文由从客户机到服务器的请求和从服务器到客户机的响应构成。
请求报文格式如下
应答报文格式如下
HTTP是个简单的协议——它基于文档的首部。客户端发送一个请求给服务器,服务器发送一个响应给浏览器并附带所请求的文档。在原始的服务器中,它不记忆关于客户的任何信息。这意味着HTTP是“无状态”协议,不在请求的过程中维护客户的信息。HTTP的无状态性意味着它的伸缩性好,这种特性对于HTTP原本要服务的静态网页不成问题。
随着Web服务的不断发展,相继出现了“**p”等动态网页技术,这给原始的服务器带来了挑战。想象一下,当我们去干洗店洗衣服时,如果服务员没有给你提供收据同时也没有记住你的样子,当你返回来取衣服时,他一定会花很长的时间来确定哪一件衣服是你的(可能多数情况下无法确定)。这就是在无状态环境下开发应用的问题。解决这个问题有两种方法:cookie和URL重写,这就像干洗店的服务员给你提供了收据一样,通过记录你的状态来方便你对衣服的存取。
1.3.2 Servlet
HTTP能很好的服务于静态内容,Web服务器本身都带有这个功能。但是要处理动态内容就需要另外花费一番心思了。你不得不解析HTTP首部,理解它们的意义,然后以正确格式创建新的头部。而这正是Servlet所关心的:提供面向对象的视图来简化Web应用开发。HTTP请求和响应被封装为对象,通过访问输入和输出流来读取用户请求和写入的动态内容。这些请求交给Servlet处理。
注:从技术上说,Servlet可以用来提供各种请求/响应环境的服务功能。它并不一定要使用HTTP协议。在这里我们指的是javax.servlet.http包,它是为处理HTTP请求专门设计的。
前面曾提到过,HTTP的一个大问题是无状态性,Web应用解决这个问题的方法是使用会话(session)。会话是Servlet提供的一个最大的亮点,虽然幕后它依然使用cookie或者URL重写,但已经对程序员屏蔽了这种复杂性,对于我们来说是透明的。在美国,Servlet+EJB+JSP一度成为电子商务网站的开发标准。
Servlet还有其它很多优点,比如安全性、日志、生命周期时间、过滤、打包和部署等。这些特性形成了JSF的基础。事实上,JSF本身就实现为一个Servlet,而所有的JSF应用都是标准的J2EE Web应用。
但JSF在Servlet之上更进一步。Servlet包含了构建Web应用最基本的、必要的基础设施。但是,我们仍然不得不自己处理底层HTTP协议的属性:请求和响应。JSF应用具有UI组件,他们和后台Bean相关联,并产生应用逻辑所使用的时间。Faces使用Servlet作为其底层设施,但是应用开发人员却可工作在更高的抽象层次:开发Web应用而无需过多关心HTTP或者Servlet。
1.3.3 JavaBean
1.JavaBean
在以前所开发的JavaBean中,JavaBean所担任的是一些用 lan
分享到:
相关推荐
### JSF介绍与技术概述 #### 一、JSF概览 JSF(JavaServer Faces)是一种基于Java的标准Web应用程序框架,它为开发者提供了一种简单的方式来构建动态且交互式的Web应用。本节将深入探讨JSF的核心概念、特点以及与...
**JSF(JavaServer Faces)** 是一个Java平台上的企业级Web应用程序开发框架,由Java Community Process(JCP)制定并归档为JSR(Java Specification Requests)314。这个框架专注于简化用户界面组件的构建和管理,...
这个PPT的目的是向我们介绍JSF的主要特性和如何在实际开发中应用它。 首先,JSF的核心组件是其用户界面(UI)组件。JSF提供了一套API来表示这些组件,管理它们的状态,处理事件,执行输入验证,定义页面导航,并...
### JSF框架详解 #### 一、什么是JSF? JavaServer Faces (简称JSF) 是一个基于Java EE标准的Web应用程序框架,旨在简化Web应用程序的开发过程。JSF的目标是提供一套标准化的方法来构建和管理用户界面。它不仅提供...
书中会介绍如何创建一个简单的JSF应用程序,设置开发环境,以及如何使用JSF的UI组件来构建动态网页。此外,还会讲解EL(Expression Language)和 Managed Beans,这两个是JSF中用于数据绑定和业务逻辑处理的关键技术...
JavaServer Faces(JSF)是一种Java技术,用于构建和维护用户界面,特别是在Web应用程序中。JSF遵循模型-视图-控制器(MVC)架构模式,简化了开发过程,将展示逻辑与业务逻辑分离。 **JSF简介** JSF的核心是UI组件...
介绍JSF基本构成,包括JSF优点和JSF的请求生命周期,jsf的体系结构
JSF的学习入门知识教程,里面有例子还有各个标签的使用及属性介绍
JavaServer Faces(JSF)是一种由Sun Microsystems开发的MVC(Model-View-Controller)框架,用于构建J2EE平台上的Web应用程序。JSF的核心理念是通过可重用的服务器端组件来创建用户界面,简化Web应用程序的开发。在...
JavaServer Faces(JSF)是Java平台上用于构建Web应用程序的官方标准框架,由Java Community Process(JCP)制定。JSF的核心理念是提供一个组件化的用户界面开发模型,简化前端开发,让开发者能够专注于业务逻辑而...
JavaServer Faces(JSF)是一种基于Java的服务器端Web应用程序开发框架,主要目的是简化用户界面组件的构建和管理。在本文中,我们将深入探讨JSF的核心概念、组件、上下文和生命周期,帮助初学者理解其工作原理。 1...
6. **组件库**:介绍JSF标准组件库JSF 2.x中的组件,如`<h:inputText>`、`<h:commandButton>`等,以及第三方组件库,如PrimeFaces和RichFaces。 7. ** faces-config.xml**配置:解释配置文件的作用,如何设置导航...
1. JSF的基本概念和架构介绍。 2. 如何设置和运行JSF项目。 3. 创建和使用Managed Beans的方法。 4. 使用Facelets或JSP创建视图页面的步骤。 5. JSF生命周期的详细解释。 6. 组件的使用,包括事件处理和数据绑定。 7...
### 应用JSF常用标签介绍 #### 一、引言 JSF(JavaServer Faces),作为新一代Web应用框架,自其诞生以来便受到了广大开发者群体的广泛关注。它以其独特的组件体系、事件处理机制以及对MVC(Model-View-Controller...
IBM的JSF资料可能还会介绍如何扩展JSF,包括创建自定义组件、监听器和行为,以及如何将第三方库(如PrimeFaces或RichFaces)集成到IBM的JSF实现中。 总的来说,"IBM JSF学习资料"将带领你深入了解JSF的各个方面,...
在提供的"JSF趙剣.pdf"文件中,可能会详细介绍以上概念以及更多关于如何实际操作JSF实例的步骤和技巧,包括如何配置环境、创建和使用Managed Beans、设计用户界面、处理表单提交以及调试和优化JSF应用程序的方法...