现在的位置: 首页 > 综合 > 正文

专家访谈:JSF技术是否在国内普及

2012年08月22日 ⁄ 综合 ⁄ 共 5235字 ⁄ 字号 评论关闭
 

专家访谈:JSF技术是否在国内普及

麻地河介绍:

湖南人氏,硕士,投身软件行业超过十年。最初在某贸易公司电脑部任程序员三年,后以系统分析员身份进入某软件公司,参与了若干大型MIS的需求分析、设计和编码,并先后担任开发部经理及总工等职务。此后职业规划渐从技术转向管理。曾在 NortelR&D中心任职,对外企的软件开发管理模式感受颇深,后受聘于国内某大型软件企业,负责项目管理。2004年辞职创业,现为顾问。 因不舍程序员身份,遂自诩为IT自由撰稿人,希望藉此认识更多的程序员朋友,分享彼此的程序人生。

记者:请您用简单的几句话概括一下JSF

麻地河:JSFJava Web表示层的标准规范,借鉴了包括Struts在内的很多Java Web框架技术的优点,是目前有影响力的Java Web框架技术的集大成者,今后也将继续吸收最具代表性的Java Web技术。各大厂商不遗余力地推广JSF,正是看好了JSF的前景。现在Java
Web
的框架非常多,程序员面对这么多的选择时,往往无所适从,有一个规范无疑是好事。与其他所有Java Web框架不同的是,JSF不是具体的实现,它只是一个规范,并没有限制各个厂商的活力,他们可以在规范之下提出自己独特的实现,在性能、易用性、友好性和扩充功能方面下功夫。有一个基本的框框,又留出足够的自由空间,这正是规范的魅力所在。借此机会,我呼吁国内的程序员尽快转向JSF,不管你是新程序员还是老程序员,学会JSF,让你能够把握Java Web框架技术的发展趋势,从容面对Java Web开发的未来。

记者:JSF目前状况如何?未来会向什么方向发展?

麻地河:JSF的现状可以从几个方面来说明。先说接受程度,Google的关键词搜索数据显示,在国外,JSF已经和Struts平分秋色,甚至略有超出,国内稍微差一点,Struts还是占据第一的位置。这是可以理解的,JSF的流行度在国外处于快速上升的阶段,而国内对新技术的采纳一般要比国外晚一年左右,因此,可以预计,一年之后,国内的JSF也将和Struts平起平坐。

再说JSF的成熟度。版本方面,JSF的版本由1.01.11.2,已经挤干了bug,添足了功能,完成了雪中送炭的任务,进入实用阶段,后面的2.0版本会有比较大的动作,包括提高易用性等,是锦上添花之举。开发工具方面,现在市面上已经有很多支持JSFIDE,最著名的当属开源的NetBeans,这也是我目前使用的JSF开发工具。除此以外,IBMOracleBEA和其他一些公司也有不错的IDE,并且大部分都是开源或者免费的。最令人欣喜的是,JSF页面可视化开发已经成为开发工具的一种“标准配置”,使用起来非常方便和高效。

不尽如人意的地方也是有的,最突出的是JSF的中文资料非常缺乏,尤其是面向JSF初学者的,以实用性为主的图书,几乎没有。这也是我写JSF Web应用开发实战》这本书的初衷。JSF的初学者不需要也没有必要了解JSF的技术细节,他们需要的是快速进入JSF领域,马上开始写自己的第一个JSF程序,了解JSF有哪些技术要点,如何在Java Web编程中使用这些技术,还有就是丰富的、可以运行的范例,以及对范例的详细代码分析。JSF Web应用开发实战》这本书正是带着这些目的去写的。

JSF未来的发展,最值得关注的,是JSF工具的进化。任何技术,如果不能在工具的支持下给程序员带来效率的提高和使用上的简便,是不会长久的。JSF is designed to be tooled,离开工具,JSF的优势无从发挥。工具的进化我认为会体现在两条线上,一条线是继续向可视化和自动编码方向发展,例如,你拖放一个数据库表到页面上,工具可以自动生成规范的CRUD(指记录的生成、读取、更新和删除)代码,很多目前需要手工编写的代码,未来会更多地由工具自动生成;另一条线是UI组件的大量涌现,专用的、通用的或者各种特殊用途的,有点类似Windows领域的ActiveX控件。实际上,现在已经有很多UI组件包出现了,有的还直接提供对Ajax的支持,不过现在UI组件包和开发工具的集成还不容易,未来会在这方面提出规范,使得开发工具和UI组件包能够无缝集成,增加程序员的选择范围。

工具的进化,是程序员最容易感受到的,其实,作为Web UI的标准框架,未来JSF还会衍生出很多新技术。这方面JBoss已经走在前面,它的Seam允许程序员直接将EJB定义为JSF的托管Bean,从而将表现层和业务层很容易地“粘合”在一起。SeamJBoss的私产,在规范领域,与之对应的是WebBeans,这一规范的提出,将把JSFEJB有机地集成在一起,极大地简化企业级Java Web应用的开发,非常值得期待。

记者:您说JSF能提高Java Web开发的效率,能说说具体是从哪些方面提高效率的吗?

麻地河:关于JSF提高Java Web开发的效率,最明显的莫过于JSF减少了业务无关代码的编程量。这是什么意思呢?我们编写任何应用程序,代码无非划分为两类,一类是业务相关的,一类是业务无关的。以登录页面为例,业务相关代码是指验证用户名和密码并给出验证结果的代码,你可能针对某种规则去验证,也可能与数据库中的注册信息进行比对,验证通过返回true,否则返回false,这些都是业务相关。业务无关的代码是你获取用户名和密码以及将验证结果回馈给用户的代码,这包括从HTTP请求中解码用户输入、将其转换为字符串类型、验证它的长度是否合适、将“恭喜你,验证通过”或者“用户名或密码错误”的提示信息显示在页面上等等。当然,这个划分不是绝对的,有些代码既可以理解为业务相关的,也可以理解为业务无关的,取决于你的观察点。我粗略对比过,用JSP,业务相关代码和业务无关代码的比例大致是一半对一半,而用JSF,这个比例可以上升到80%比20%,也就是说,原来你需要5个小时编写业务无关代码,现在你只需要2个小时就够了,多出来的3个小时,你可以编写更多的业务相关代码,这就是效率提高的表现。

为什么JSF能够做到大规模减少业务无关代码呢?这是因为JSF框架替程序员处理了很多HTTP协议底层细节。比如说,多数情况下你不用编写类型转换代码,JSF缺省的转换器会自动完成需要的类型转换。再比如,假设你写了验证数据有效性的类,你不用考虑在什么时候什么地方显式地实例化验证器类,调用其验证方法,也不用操心验证错误消息怎么显示在页面上,只需配置好你的验证器,JSF会在适当的时候自动完成这些工作。

限于时间关系,这里只能列举JSF相对比较明显的一些技术优势,实际上,JSF有很多创新技术,例如托管Bean、导航、可插入性等等,当然,这些技术的优势不是那么直接表露,需要对JSF有一定的了解后才能体会到。可以这么说,JSF诞生于Sun大刀阔斧简化Java开发的大背景之下,其设计目的就是为了简化Java Web开发,提高Java Web的开发效率,因此,即使你并不十分了解JSF的技术细节,你也可以相信这一点。

记者:很多程序员想学或者正在学JSF,对他们,您有什么建议?学习JSF应该注意什么问题?

麻地河:谈到这个问题,让我想起了很多年前大家学OO时的情景。我本人是从汇编开始学习编程的,中间经历了BasicFortranCPascalDebaseFoxBasePowerBuilderDelphi等等很多编程语言,直到现在的Java。从一种编程语言向另一种编程语言的转变,有时候很容易,有时候很难。大家可能发现,著名的C++并没有出现在上面的清单中,为什么?我其实是稍微懂一些C++的,所谓稍微,是指我能把C++当成C来用。

C++是面向对象的编程语言,而C是面向过程的,把C++当成C来用,实在是对C++的亵渎。据我所知,和我有着同样经历的老程序员,很多人也像我一样,只是“稍微”懂一点C++。相反,那些直接从C++开始的新手,却很快学到C++的精髓。其实原因很简单,在C++诞生之前,我们一直是面向过程编程的,C++要求我们面向对象,对于有着根深蒂固的面向过程思想的程序员来说,这个弯子拐得太猛了,令人难以适应。

JSP或者Struts转向JSF,和从面向过程转向面向对象非常类似。JSF Web应用开发实战》这本书出版以后,为了配合读者的要求,我在www.madihe.com上建立了论坛,并且公布了我的邮箱madihe@126.com,用来和读者交流。从论坛帖子和读者来信看,有着深厚的JSP或者Struts基础的读者更多地对JSF抱着审慎怀疑的态度,喜欢探讨各种框架技术的优劣,而初出茅庐的程序员却对JSF展开怀抱,提出的都是与JSF使用有关的实际问题。

JSFJSP或者Struts是完全不同的,就像面向过程和面向对象的不同。如果你是Java Web的初学者,那么恭喜你,你没有历史包袱,可以放开手脚去干;如果你是资深的JSP或者Struts程序员,你的知识积累可能是一种促进,也可能是一种阻碍,这取决于你的态度。JSF所提出的UI组件模型和事件驱动模式,不论是在JSP还是在Struts上,都不曾出现过,如果愿意接受这种新技术并且适应它,那么你很快就能学会JSF。如果你对JSF抱怀疑态度,浅尝辄止者多半会放弃JSF,但锲而不舍者最终会为JSF的技术所折服,但你一定要有思想准备,探究JSF的实现细节,可能花费你很多的时间和精力。

具体来说,有这么几点,可以帮助你更快地学习JSF

1. 不做框架优劣之辩。每种框架都有存在的理由,辩论一种框架能否“战胜”另一种框架,只会浪费你和别人的时间,除非你在两方面都是专家,但即使是专家,在论坛中脱口而出的结论,也未必是深思熟虑的;

2. 接受JSF,而不是怀疑它,除非你已经对JSF了如指掌,达到了可以对它品头论足的程度。仅仅用JSF做过几个项目是不够的,如果你能给出一个自己的JSF实现,那大家都会承认你是JSF专家。

3. 如果你还是忍不住怀疑JSF,那么不妨留意一些基本事实。第一,JSF规范由Sun提出,先后获得了IBMOracleBorlandApacheBEA等的支持,而Sun目前仍然稳坐Java老大的位置,其他如IBMOracleApache等也未见颓势,这些巨鳄不倒,JSF不乏撑腰的;第二,JSF已经成为Java EE规范的强制部分,所有Java EE服务器,必须支持JSF;第三,JSF的推进一天也没有停滞,后续版本(JSF
2.0
)陆续出现,基于JSF技术的新技术如JBossWebBeans不断推出,开源的JSF组件包层出不穷。

 

记者:我知道您最近写了一本JSF方面的专著,书名叫做《JSF Web应用开发实战》,是目前国内不可多得的中文JSF原创类图书精品,能谈谈您为什么要写这本书吗?

麻地河:我写这本书的目的其实很简单,就是向国内的程序员推广JSF这一Java
Web
编程技术。我最初接触Java
Web
编程时,并不知道有JSF这个东西。我的第一个项目用的是JSP,很痛苦,为什么呢,不是因为我要从零开始学习JSP,我的自学能力算比较强的,学习新技术不存在太大的困难,让我觉得痛苦的是,我大部分的时间没有花在业务逻辑上,而是花在了编写与业务逻辑无关的RequestResponse处理代码上。做过项目的程序员都知道,项目的时间就像电脑的内存,永远都不够,JSP需要程序员花费大量精力照顾HTTP协议底层的细节,从这一点看,JSP的效率是很低的,因此,我在第二个项目时,就决定弃用JSP了。

那时是2004年,Struts如日中天,不过由于我是刚刚进入Java Web编程这个领域,相当的孤陋寡闻,所以并不知道大名鼎鼎的Struts。如果当时我请教过任何一个Java Web的高手,他们一定会推荐Struts给我,可是我没有,我只是闷头在Sun的网站上寻找JSP的替代技术,就这样,我在SunJava EE Tutorial文档中看到了对JSF的介绍,可以说是一见钟情。最初吸引我的是JSF的组件模型和事件驱动模式,因为这是我在桌面应用中早已熟知的概念,感觉很亲切,后来才知道,JSF不止这些,它的集中式页面导航、托管Bean机制以及工具支持下的可视化开发,都是提高开发效率的利器。

当时国内很少人用JSFJSF的中文资源更是几乎没有,所有我很孤独。碰到问题,没有任何人可以帮我,我只能在Sun的网站和论坛中搜索答案,幸亏阅读英文资料的能力还行,不过学起来确实辛苦。用JSF做了一两个项目后,对JSF有了一定了解,知道了JSF的开发效率,为了交结更多的JSF同学,我就开始在IT168上发表文章介绍JSF,想让更多的人转向JSF。原本是想给自己一个找到组织的感觉,后来经不住IT168编辑赵恒的撺掇,最终决定安下心来写了这本书,权当是对自己学习JSF的过程的一个总结吧。


 

抱歉!评论已关闭.