1. 引子:我与JSF的第一次亲密接触
2004年3月,当我着手开发我的第一个Web程序时,我选择了JSP.作为一个传统的桌面程序员,而且是老程序员,向Web程序员的转变是异常痛苦的。 3个月的时间,程序总算完成了,但从此对JSP恨之入骨。凌乱的书写格式,数据和界面的混杂,尤其是嵌入到页面里的Scriptlet,让我搞不清自己是 编程序的还是写网页的。
因此,当接到第二版的开发任务时,我毫不犹豫地放弃了JSP,寻找一种替代技术。上网一搜,却发现框架多如牛毛,评论文章各执一词,莫衷一是,让我彻底迷 失了。犹豫摇摆不定之际,sun的J2EE Tutorial文档中关于JavaServer Faces技术的介绍吸引了我:UI、component、event、listener这些在桌面程序中熟悉的字眼,让我在Web开发中找到了桌面程序 员的一些感觉。
象开发桌面程序那样开发web程序,这是我选择JSF的初衷。基于这样肤浅的认识,跌跌撞撞上路了,在工期和新技术的双重压力之下,超负荷的工作令人透不 过气来,但每每从JSF中发掘出令人惊喜的新特性,又给我带来极大的满足感。第二版终于完成时,日历恰好翻过一个整月。JSF带来的效率提升是显著的。
事实上,到现在为止,我对于JSF还只能说是初步了解,远未达到掌握,更谈不上精通,但这并不妨碍我视JSF为Web开发的首选框架。尤其是对于新手,如 果还没有在Struts、Tiles、Spring、Tapestry等框架中走得太远,那么,集中你有限的精力踏上JSF之路吧。
2. JSF优势之一:UI组件(UI-component)
UI组件(UI-component)一直是桌面程序的专利,web程序中,虽然HTML定义了基本的UI标签,但要使这些UI标签像UI组件那样工作, 还需要很多代码片断来处理数据及其表现形式,而且有效地组织这些代码片断使其协调一致也是一件繁琐的工作。JSF的UI组件是真正意义上的UI组件,能极 大地简化程序员的工作,例如,在页面上放置一个文本输入框,这个输入框立即具备了数据填充、界面更新、事件侦听、动作触发、有效性检查和类型转换的功能。 更为重要的是,程序员只需根据业务逻辑编写核心业务代码,JSF会保证代码在合适的时候被执行,完全不用考虑代码与代码之间该如何来配合。
3. JSF优势之二:事件驱动模式
事件是面向对象方法的重要组成部分,对象之间通过事件进行沟通和交流,使得一个或多个对象能够对另一个对象的行为作出响应,共同合作去完成一项业务逻辑。 通常,编写Web程序时,程序员要为对象之间的沟通设计机制,编写代码。虽然沟通的内容属于业务逻辑,但沟通的机制显然与业务没有太大关系,程序员因此为 业务逻辑之外的功能浪费了时间。JSF改变了这种状况。JSF的事件和侦听模式与大家熟悉的Javabean的事件模式类似,有Java基础的程序员并不 需要学习任何新的东西。JSF的UI组件可以产生事件,例如,当页面上一个文本输入框的内容被修改时,会发出一个“值改变事件”。另一个对象如果对“值改 变事件”感兴趣,只需注册为该对象的侦听者,并编写处理例程,即可命令JSF在事件发生时自动调用处理例程。JSF做了所有该做的事,留给程序员的只有业 务逻辑代码的编写。
4. JSF优势之三:用户界面到业务逻辑的直接映射
举个例子,表单提交是Web编程最常见的任务,也是最复杂的任务之一。当用户在网页上点击“确定”按钮时,浏览器将生成一个HTTP请求,发往服务器端的 某个Servlet,执行该Servlet的service方法。在service方法中,HTTP请求需要经历解码、类型转换、有效性验证、状态保存、 数据更新等环节,处理这些环节的所有细节,对程序员来说是沉重的负担。在JSF下,这些工作的很大一部分都由框架承担了,在程序员看来,这个过程是透明 的,用户界面端的HTTP请求可以直接映射到后端的一个事件处理例程,JSF起到了承前启后的作用。
5. JSF优势之四:程序员和网页设计人员的分工
在JSP中,程序员和网页设计人员的工作有时候是互相交织、无法区分的。这是因为JSP页面中掺入了网页设计人员所不熟悉的一些JSP标签,甚至是晦涩的 Java代码。要求网页设计人员理解这些标签和代码是不现实的,不符合分工合作的原则。在JSF中,框架为网页设计人员提供了一套标准的UI组件,在工具 的支持下,可以通过拖放简单地添加到网页上,然后设置某些显示属性来满足视觉要求。网页设计人员不需要知道UI组件背后的复杂代码,那是程序员的事,而程 序员也不需要再处理任何与视觉相关的细节,程序员所做的只是给UI组件绑定类的属性或方法。虽然程序员和网页设计人员需要修改同一份文件,但他们各司其 职,各得其所,互不干扰。程序员和网页设计人员工作的明确划分,是JSF在易用性方面迈出的一大步。
6. JSF优势之五:请求处理生命周期的多阶段划分
虽然都是建立在Servlet基础之上,但JSF的生命周期要比JSP复杂得多。JSP的生命周期非常简单,页面被执行时,HTML标记立即被生成了,生 命周期随即结束。而一个完整的JSF请求-处理生命周期被精心规划为6个阶段,典型的JSF请求需要经历所有阶段,某些特殊的请求也可以跳过一些阶段。阶 段的细分,显然引入了更多的处理,但JSF框架会管理这一切,所以,程序员在获得更多控制能力的同时,工作量并没有增加。
7. JSF优势之六:伴随工具而生存
JSF带来了Web编程的巨大变革,变革的强烈程度超出了很多工具厂商的预料,以至于现在可供JSF使用的工具非常缺乏。缺乏工具支持的JSF只会令人敬 而远之,因此,JSF在设计之初就为工具厂商预留了用武之地。在为数不多的JSF工具中,sun的Java Studio Creator是一个优秀的开发环境;Borland的Jbuilder在JSF1.1时曾经是非常好用的开发工具,可惜现在对JSF1.2的支持没有跟 上;Eclipse下JSF的插件很多,但真正支持所见即所得的JSF插件都是收费的,例如Bea的Workshop for JSF、Exadel的JSF Studio等等;此外,Oracle和IBM也有JSF的开发工具。随着工具的不断涌现,用JSF开发Web程序将会越来越方便和快速。
8. JSF优势之七:全面的用户自定义支持
前面提到,JSF将极大地简化Web程序的开发,作为一个相对复杂的框架,JSF是如何做到这点的呢?原来JSF为程序员提供了很多默认的组件和类,通常 情况下,JSF的这些默认组件和类足以满足Web开发的需要了。但是,考虑到在某些应用场合,框架的默认行为也许不符合业务的要求,JSF特别允许程序员 编写自己的组件和类,来满足客户的特殊需求。例如,程序员可以编写自己的UI组件,甚至可以创建自己的EL解释器,来支持非标准的EL表达语言。
9. JSF优势之八:Web开发的官方标准之一
JSF的1.0版本发布于2004年2月份,当时是作为一项独立的Web技术推出的。经过1.1版到现在最新的1.2版,短短的两年多时间,JSF终于在 2006年年中成为Java EE 5的组成部分,上升为Web开发的官方标准之一。Java EE 5最重要的使命就是简化Java的开发,而JSF无疑为这一使命立下了汗马功劳。在Web框架层出不穷甚至有些泛滥成灾的今天,Sun以JSF来树立标 准,对Java的发展是有益的。Sun在Java领域的领袖地位不容动摇,对于Java程序员来说,始终追随业界领袖的步伐,也许是避免技术落伍的最好方 法。
10. 结束语:该你了,JSF!
考察某项技术的流行程度,google的关键字搜索不失为一种简便易行的方法。为了便于说明,我们选择目前最热门的Struts与JSF进行比较。在 google中分别输入关键字“Struts”和“JSF”,看看google返回的网页数量。令我们感兴趣的不是网页的绝对数量,而是JSF网页数量与 Struts网页数量的比值。我们看到,对于英文网页,这个比值是0.6,日文网页是1.0,繁体中文网页是0.8,而简体中文网页只有0.4.表1列出 了具体的数据和比值。
英文网页数量(万) 日文网页数量(万) 繁体网页数量(万) 简体网页数量(万)
JSF Struts JSF Struts JSF Struts JSF Struts
719 1170 145 140 10 13 59 138
JSF / Struts = 0.6JSF / Struts = 1.0JSF / Struts = 0.8JSF / Struts = 0.4
虽然这样的比较方法不够严谨,但0.4的比例从一个侧面说明JSF在国内还没有流行起来,用“方兴未艾”四个字来描述JSF的这种状况,是再合适不过了。 由于历史的原因,国内的软件技术一直亦步亦趋地跟着国外跑,这不是我们希望的,但我们不得不承认,因此,从国外的情况来推论,我们有理由相信,JSF必将 成为国内程序员追捧的对象。正如某位哲人说的那样,JSF是早晨八、九点钟的太阳,希望寄托在JSF身上。
11. 后记:不同的声音
客观地说,JSF并非完美,业界对JSF的评价也褒贬不一。例如,由于JSF过于复杂,其学习曲线明显长于其他框架如Struts等,这在一定程度上妨碍 了JSF的推广;此外,JSF的推出略显仓促,1.0版在使用中发现很多bug,以至于sun匆忙发布的1.1版主要是为了修正这些bug;还有,在 JSF1.2版之前,JSP和JSF的融合有严重的缺陷,这主要是由于二者不同的生命周期造成的,不过,1.2版在这方面作出了改进,现在,JSP和 JSF可以在一个项目中相安无事了。
JSF的不足之处还有很多,比如UI组件不够丰富、具体实现的可选择余地过窄、使用JSF开发的实际项目不多、sun的参考实现还存在诸多bug、短期内 缺乏工具支持等等,尤其是在国内,JSF的中文文档和书籍相当缺乏。但是,不管怎样,这些都是JSF成长道路上必须经历的磨难,我相信,Sun会努力的。
分享到:
相关推荐
介绍JSF基本构成,包括JSF优点和JSF的请求生命周期,jsf的体系结构
### 四、JSF优点与挑战 优点: - 组件化开发,易于维护。 - 与Java EE平台紧密集成,丰富的库支持。 - 自动验证和转换机制,简化数据处理。 挑战: - 学习曲线较陡,尤其是对于新手开发者。 - 性能问题,特别是...
**JSF的优点**: 1. **易用性**:JSF通过组件库简化了Web开发,使得开发者能快速创建UI。 2. **集成性**:JSF与EJB、JPA等Java EE技术紧密集成,便于构建企业级应用。 3. **可扩展性**:开发者可以创建自定义组件,...
JSF还与JavaServer Pages (JSP)、Servlet和JavaBeans (Javabeans) 兼容,允许开发者利用这些技术的优点。 描述中的“XXX-java开发工程师.doc”可能是指一份关于招聘Java开发工程师的文档,其中可能包含了对候选人应...
文档通常分为PDF和CHM两种格式,每种都有其独特的优点。**PDF(Portable Document Format)** 文件保持了原始文档的布局和格式,便于打印和离线阅读,而且跨平台兼容性良好。**CHM(Compiled Help Manual)** 是微软...
JSF 优点: Java EE标准,这意味着有很大的市场需求和更多的工作机会 上手快速并且相对容易 有大量可用的组件库 缺点: 大量的JSP标签 对REST和安全支持不好 没有一个统一的实现。既有SUN的实现,又有Apache的实现...
这种实现方式的优点在于减少了服务器与客户端之间的通信,从而提高了页面响应速度。然而,这也意味着所有的数据需要一次性加载到客户端,然后由JavaScript进行分页显示。 实现JS分页通常包括以下几个步骤: 1. **...
在本文中,我们将深入探讨JSF的核心概念、优点以及如何在企业级项目中有效利用。 1. **JSF核心组件** JSF框架由一系列可重用的UI组件构成,如输入字段、按钮、表格等,这些组件通过JSF的XML方言(Faces-config.xml...
JSF 2.2作为JSF 2系列中的一个重要版本,它不仅继承了前代产品的优点,还在易用性和功能方面进行了大幅度提升。本篇文章将基于《JavaServer Faces Specification Version 2.2》文档的关键信息,深入解读JSF 2.2的...
- **兼容性与互操作性**:尽管JSF和Struts有着各自的特点,但它们之间是兼容的,可以协同工作,这意味着开发者可以在一个项目中同时利用这两种框架的优点。 #### 三、JSF生命周期 - **生命周期概述**:JSF的生命...
JSF的主要优点是简化了开发过程,允许开发者通过拖放组件的方式进行界面设计,并且与后端数据模型进行绑定。 在提供的压缩包中,包含了JSF实现所需的关键库文件,这些jar包分别是: 1. **jsf-impl.jar**: 这是JSF...
在某些情况下,甚至可以考虑将两者结合使用,以充分利用各自的优点。随着技术的发展,开发者应保持开放心态,根据实际需求灵活选择最合适的工具和技术。 总之,无论是选择JSF还是Struts,关键是理解它们的核心概念...
Struts2.0是Apache软件基金会的一个开源项目,它继承了Struts1.x的优点并解决了其不足,引入了拦截器(Interceptor)机制,使得业务逻辑与控制逻辑分离得更加彻底。Struts2.0支持多种结果类型,如Redirect、Stream等...
**JSF的优点**: - 组件化开发,提高效率。 - 自动管理组件状态和生命周期。 - 与Java EE集成良好,如EJB、JPA等。 - 支持多种视图技术,如Facelets和JSP。 **学习与实践**: 通过分析和运行"生活吧"项目,你可以...
**JSF的优点** 包括: 1. **组件化开发**:JSF提供了丰富的UI组件库,可以快速构建界面。 2. **声明式编程**:减少对低级DOM操作的依赖,提高开发效率。 3. **集成性**:与EJB、JPA等其他Java EE技术有很好的兼容性...
JSF的优点 JSF的优点在于它可以隐藏HTTP、数据转换等细节,允许开发人员专注于业务逻辑的实现。同时,JSF也提供了一套标准的标签和API,使得开发人员可以轻松地构建Web应用程序。 JSF的组件 JSF的组件包括managed...
这个框架的主要优点是开发者无需编写JavaScript代码就能实现Ajax交互。Ajax4jsf充分利用JSF框架的优势,如生命周期管理、数据验证、转换的灵活性以及对静态和动态资源的管理。通过Ajax4jsf,开发者可以轻松地将具有...
Facelet的主要优点包括: 1. **组件化**:Facelet允许开发者使用XML语法来定义和组合UI组件,这使得页面结构更清晰,易于维护。 2. **声明式编程**:通过XML标签,可以声明性地定义组件行为,减少模板代码,提高...
**JSF的主要优点**包括: - **职责分离**:确保前端设计者和后端开发者的工作不相互干扰。 - **组件化**:允许使用预定义的组件构建页面,这些组件具有内置的功能,如数据绑定和事件处理。 - **状态管理**:自动管理...