工具是JSF曾经的痛,没有可视化开发工具支持的JSF,无法将其简化Java Web开发的特性发挥得淋漓尽致。在经历了缓慢的发展历程后,NetBeans终于脱颖而出,实现了真正意义上的JSF可视化开发。NetBeans的Visual Web Pack 是JSF可视化开发的工具包,具有多项创新的开发技术,正是这些突破常规的手法,造就了NetBeans在JSF可视化开发领域的先锋地位。
1. 工具是JSF曾经的痛
笔者自从数年前一个偶然的机会接触到JSF后,一直对JSF寄予厚望,而JSF也未曾负我,在诸多项目中成为我的得力助手,让我尝到了快速Java Web开发的甜头。有那么一段时间,只要有人和我谈论起Java Web方面的技术问题,我都会像个买瓜的王婆,拿出JSF来吹嘘一番。后来,在IT168上陆续发表了几篇介绍JSF的文章,被Itpub.net论坛转载,竟然在坛友中博得了一个“JSF狂人”的称号,一时之间,不知道是应该喜出望外,还是应该受宠若惊。非常巧合的是,“JSF”恰好是中文“教唆犯”的汉语拼音首字母,所以,每当我写完一篇JSF的文章,极力鼓动Java Web程序员转向JSF时,我感觉自己又当了一次“教唆犯”。其实,作为一个凡人,笔者既没有“先天下之忧而忧,后天下之乐而乐”的崇高境界,也不能实践“勿以恶小而为之,勿以善小而不为”的古训,之所以为JSF奔走呐喊,只是因为JSF曾经带我走出Java Web的泥绰,使得作为程序员的我,过上了稍微轻松一些的生活。在大批Java Web程序员仍然在JSP的乱麻中“剪不断,理还乱”时,我觉得自己有义务向他们介绍JSF,哪怕是出于同病相怜的动机也好。
尽管我费力地鼓吹JSF,其实在私底下,我不得不承认,JSF有一只痛脚。这只痛脚不是别的,就是工具的支持。关于JSF的优势,我可以如数家珍般娓娓道来,比如UI组件模型,比如事件驱动,比如集中式的页面导航等等,不一而足,不过,一旦有人问起“JSF比ASP.net如何”这样的问题时,我只好顾左右而言他,打个哈哈转移话题。在技术架构上,JSF比ASP.net有过之而无不及,且不说Java语言的广泛适用性,起码JSF与具体标记语言的无关性,就让ASP.net自愧弗如,而且,JSF是一个精心设计的框架,有着丰富的插入点,框架的任何一个特征,都允许用户用自己的实现去替代,在开放性方面,非ASP.net可比。可惜,这些优势只对专家有意义,在普通程序员眼里,ASP.net才是完美的开发环境,是程序员的利器。
在一个Microsoft Visual系列高度集成的开发环境里,用鼠标拖拖拉拉,写上不多的几行代码,然后一个功能强大的Web应用就诞生了。Microsoft彻底改变了传统的Web编程方式,ASP.net让程序员可以半躺在沙发上编写程序,一杯清茶下去,程序已经欢快运行。
Java Web的程序员就没有这么幸运了。JSF推出以后,虽然号称“designed to be tooled”,但能够真正支持可视化开发的IDE实际上并不多见,尤其是在开源领域,可以说几乎没有。JBuilder曾经是最好的JSF工具,不过,JBuilder对JSF可视化开发的支持,仅限于导航规则的编辑,而这其实对JSF应用的开发帮助不大。在JBuilder中,JSF的组件不是显示为一个图标,而是一个tag;当你试图从面板上拖放一个JSF组件到页面上时,你看到的也不是一个组件,而是一段代码。尽管如此,JBuilder还是在其介绍文档中声称支持JSF可视化开发,很让我兴奋了一阵,安装上以后才知道,此“可视化”非彼“可视化”也。也许是因为JBuilder名声太响,此后东施效颦者众,很多JSF的IDE都会弄一个导航规则的可视化编辑器出来,然后给自己贴上“JSF可视化开发”的标签,来吸引Java Web程序员的眼球。
直到NetBeans出现,这种状况才得到改变。
2. NetBeans的可视化开发
在Sun的JSF论坛中,对于NetBeans的评价,可以用“惊呼”二字来形容。JSF的开发工具非常多,有开源的,也有商业的,初学者在如此众多的工具面前,往往眼花缭乱,无法作出抉择。因此,论坛中常有JSF的初学者发帖子,询问用什么开发工具好。过来者们多半会推荐自己使用过或者正在使用的工具,不过,任何一种工具都是毁誉各半,有人说好,一定有人说不好。唯有NetBeans是个例外,用过的无不大加赞赏,极力推荐。
NetBeans的名字非常奇怪,第一次看到这个单词时,我还以为是JavaBeans的升级版本呢。后来才知道原来是个免费的开源Java集成开发环境。NetBeans可以运行在几乎所有的平台上,包括Windows, Linux, Solaris, and the MacOS。经过简单的安装过程后,程序员需要的所有工具,就都唾手可得了。
不管是桌面应用、企业应用、Web应用还是移动应用,NetBeans都可以给程序员提供全面的可视化支持。
在架构上,NetBeans类似于现今非常成功的Eclipse,在一个基础框架上,通过集成不同的插件或者工具包来扩展其功能。但与Eclipse相比,NetBeans最近的发展要迅速得多,大有后来居上之势。现在最新的NetBeans版本是5.5,这个版本已经具备相当丰富的功能。
例如,脱胎于Matisse项目的Swing GUI Builder,是一个直观的Swing GUI开发工具包,通过简单地从组件面板中拖放组件到界面上,然后编辑其属性,就可以完成用户界面的开发。在这个工具包的支持下,程序员甚至可以当着用户的面设计GUI原型,让用户马上看到自己的设想变为现实,提高沟通效率和用户满意度。
Web Application Development是用来开发Web应用的,支持JavaServer Faces (JSF)、JavaServer Pages (JSP)、持久化单元、Struts以及JSP的标准标签库JSTL。Web Application Development附带了一个部署描述符的可视化编辑器,为了方便Web应用的调试,还提供了HTTP监视器,可以记录和查看HTTP协议交互的细节。最值得称道的是Web Application Development对Web数据库应用的特别支持,只需几个步骤,就可以生成一个全功能的JSF网页,用来操控后台数据库表中的数据,例如查询、新增、修改、删除等等。
企业应用的开发支持则由Enterprise Development工具包提供,支持企业应用、EJB模块、Web应用和企业应用客户端的开发。这个工具包含有大量的向导,以前很复杂的开发过程,现在变得十分“傻瓜”了,例如nterprise Java Beans (EJB 3)和JAX-WS web services的开发等等。
在应用服务器方面,NetBeans内置了对主流应用服务器的支持,包括Sun Application Server、Tomcat、Weblogic9和JBoss 4,如此广泛的应用服务器支持,几乎可以满足任何Java应用的需求,而且更多的应用服务器还可以通过配置集成到NetBeans中。NetBeans支持J2EE 1.4和Java EE 5,包括JAX-RPC和JSR 109 标准。
除此以外,在典型的IDE中可以看到的功能,NetBeans都具备,例如版本控制、开发者协作、UML建模等等。NetBeans不但支持常规的Java应用开发,还支持Java ME和基于SOA架构的应用开发,甚至,NetBeans的C/C++工具包还提供对C/C++语言开发的支持,并且可以跨越Microsoft Windows、Linux和Solaris等不同的平台。对于需要在Java和C/C++两种语言环境下工作的程序员来说,拥有一套NetBeans就足够了。
3. NetBeans下真正的JSF可视化开发
前面罗列了NetBeans在Java可视化开发方面具备的功能,有了这些功能作为基础,NetBeans中JSF的可视化开发,可以说是水到渠成了。完成这一使命的,就是NetBeans最具价值的Visual Web Pack工具包。如同其他工具包一样,这个工具包也是免费的,不过,免费的Visual Web Pack工具包已经在很多方面超越了大多数商业开发工具,尤其是在JSF应用的开发上。
Visual Web Pack工具包给NetBeans提供了功能强大的开发工具,在这些工具的支持下,Web应用的开发速度得到极大的提高。可视化是Visual Web Pack工具包的核心目标,因此,Visual Web Pack工具包中含有多个可视化编辑器,可以利用诸如AJAX、CCS和JSF等技术,快速构建标准的Web应用。
谈到可视化开发,首先想到的肯定是Web页面的开发。用JSP技术开发Web页面是一个痛苦的过程,早期的JSP在页面上夹杂了太多的coding元素,使得JSP页面的开发和维护成为程序员的恶梦,虽然现行的JSP版本有了一些改进,但仍然存在诸多不足。JSF是Sun简化Web开发的一种尝试,在Visual Web Pack工具包支持下,这种尝试取得了极大的成功。创建一个页面,从面板上拖放组件到页面上,编辑组件的属性,编写事件处理例程,从Visual Web Pack开发Web页面的步骤中,已经看不到多少“Web”的东西了。当然,Web应用和桌面应用有着本质的不同,不过,Visual Web Pack已经封装了这二者之间的差异,感觉上,Web应用和普通桌面应用的开发过程完全一样。
除了页面上的UI组件外,Visual Web Pack甚至将可视化的概念扩展到了其他JSF组件。例如,JSF的转换器和验证器,它们原本不是可视化组件,不过,在Visual Web Pack下,为一个可视化组件绑定转换器和验证器的过程,如同为页面添加UI组件一样,也是简单的drag-and-drop。这得益于JSF的高度模块化设计,任何编程元素都是component,都可以drag-and-drop。
可以drag-and-drop的还不止这些,复杂的数据库编程,也已经被Visual Web Pack可视化了。配置好数据库后,从页面访问数据库表中记录的最简单方法只有两个步骤:第一,在页面上放置一个用来显示数据的UI组件,例如下拉列表组件;第二,将一个表直接拖放到UI组件上。就这样,无需任何代码,运行时,这个下拉列表组件将显示出表中第一个非键列的所有记录值。这在Web数据库应用中非常有用,例如,通过这样的两次drag-and-drop操作,你就可以在电子商务网站上显示商品类别的清单,供用户选择。如果这样过于简单,不能满足你的需求的话,那么,你也可以选择更精确的方法,将表拖放到页面上(而不是组件上),然后通过“绑定到数据提供器”,选择你希望在列表中显示出来的字段。这样,你可以不单显示商品类别的名称,还可以同时显示对商品类别的简单描述等等。
页面导航是Web应用所特有的要求。与其他框架不同,JSF的页面导航是集中式的,这是JSF的一个创举。Web应用是由页面组成的,当应用的规模增大,页面数量也随之增加到一定程度时,在页面中导航,有点类似大海航行,容易让人摸不着方向。分散式的导航控制在小规模应用场合下,简单易行,不过,大规模应用更适合采用JSF集中式的导航控制。Visual Web Pack提供了一个可视化的页面导航设计器,打开设计器,Visual Web Pack自动将应用的所有页面显示为一个个小图标,而所谓的导航,只是从一个页面拖动一条连线到另一个页面,仅此而已,形象而又直观。一条连线称为一个出口,给出口命名后,在代码中就可以通过选择出口来导航到指定的页面。
4. NetBeans的创新
限于篇幅,上面所介绍的,并非NetBeans可视化特征的全部,NetBeans的Visual Web Pack和JSF珠联璧合,在Java Web的可视化开发方面,向前迈出了非常成功的一步。
熟悉JSF的读者一定知道,JSF面世已经好几年了,虽然JSF的可视化开发工具一直在进步,不过推进速度显然不尽人意。包括Borland等在内的大牌IDE工具提供商,花了几年的时间,也没有能够推出一个让程序员得心应手的JSF可视化开发工具,为什么NetBeans的Visual Web Pack能够取得如此巨大的进步?在NetBeans可视化JSF应用开发的背后,到底隐藏着什么玄机?
要解答这些问题,还得从JSF本身说起。JSF是Java Web框架发展历程上的一个特立独行者,集简单和复杂于一身,而且是典型的极端主义。一方面,JSF的设计目标是简化Java Web开发,另一方面,JSF本身又是迄今为止最复杂的Java Web框架。这是JSF的两个特点,前一个特点由于工具的缺乏,并没有得到很好的发挥,倒是后一个特点,早被Sun的专家们有意无意地“推广”得家喻户晓了。
别的不说,一个被划分了六个阶段的请求处理生命周期,就足以让百分之九十的初学者望而却步了,剩下百分之十迎难而上的无畏者,半途中恐怕又被复杂的“模型”“模式”难倒一大片。只有大难不死的几个好钻牛角尖者,费九牛二虎之力弄明白了JSF的理论后,却发现缺乏工具支持的JSF,其实只是“看上去很美”。
没有工具支持的JSF,像一个迷宫,到达出口的路径有无数条,程序员宝贵的时间,大半浪费在选择一条合适的路径上了。工具对JSF来说举足轻重,但工具厂商如果只把思路局限于JSF的规范之内,那么,工具无非是给迷宫的道路铺上水泥而已,路虽然好走了,但解决不了方向性的问题。很多开发工具只是在做铺路的工作,包括大名鼎鼎的JBuilder以及Eclipse下种类繁多的JSF插件或插件包。
NetBeans终于在这方面有所突破,Visual Web Pack不但铺了路,还给迷宫架上了一座座桥梁,化繁杂为简洁,在迷宫入口与出口之间建立了直接的联通道路,彷佛现代城市中的立交桥和高架路。Visual Web Pack采用了很多项技术,来降低JSF框架的使用难度,这些技术,有的严格遵循JSF规范,有的是对规范的扩展,有的甚至与JSF规范的建议相左,不管怎样,采用了这些创新技术的NetBeans,把其他JSF工具远远地甩到了后面。
比如页面Bean就是Visual Web Pack的一项创新技术。当程序员在NetBeans中创建一个网页时,NetBeans自动地创建一个同名的页面Bean,并将这两者绑定在一起。JSF规范本身并没有页面Bean这个概念,有的只是托管Bean。页面Bean其实就是托管Bean,只不过因为它和页面有一一对应的关系,NetBeans将其称为页面Bean,以彰显其特别的用途。
托管Bean和绑定,都是JSF的标准技术,不足为奇,但将这两项技术组合起来,就是一个创举。做过JSF开发的程序员,恐怕都为页面和托管Bean的对应关系烦恼过,是一对多、多对一,还是一对一、多对多,不同的程序员有不同的选择,甚至同一个程序员一觉醒来,也可能完全推翻自己昨天的设计。在NetBeans中,这个不再是问题了,Visual Web Pack自动建立一对一的关系,自动以实例绑定的方式沟通页面组件和Bean属性,自动维护页面和页面Bean的同步,自动保持数据的同步更新等等。有了页面Bean,如果你想在代码中访问页面组件,直接访问页面Bean就行了,它是页面的编程逻辑,是Java代码形式的页面。
5. 来自沃土的智慧和力量助NetBeans成长
当我第一次使用Visual Web Pack时,有一种似曾相识的感觉,尝试新建一个页面后,终于发现,原来Visual Web Pack和Sun Java Studio Creator如出一辙。事实上,Visual Web Pack(以下简称VWP)就是Sun Java Studio Creator 2(一下简称Creator)的替身。
NetBeans已经发展多年,不过,一直是Java高手的开发工具,并非面向Java初学者的。2001年,当Sun意识到自己缺乏一个对初学者有吸引力的IDE时,决定开发一个全新的IDE,这就是后来的Creator。
2004年,当JSF推出时,Creator是第一个支持可视化JSF页面开发的IDE,我试用过几天,发现确实不错,可惜,Creator对内存的要求太高,在普遍只有512M内存的情况下,最终还是放弃了Creator,继续使用JBuilder。
Creator和NetBeans有着千丝万缕的关系,它们基于相同的代码库,只不过Creator借鉴了VB/ASP开发者们常用的IDE的设计理念,强调可视化和易用性,目标显然是降低Java开发的难度。而NetBeans则突出了与Java标准和规范的同步性,一旦有新的Java技术出现,NetBeans很快就推出新版本。维护两套开发工具显然不符合经济原则,因此,当Java走向 EE 5,JSF跨出1.2的步伐时,Sun决定将Creator纳入NetBeans的版图,这就是NetBeans的工具包VWP。
VWP 和Creator的这种紧密关系,说明了为什么VWP在易用性方面这么突出。VB可以说是最容易使用的开发语言之一,既然要和VB的开发工具竞争,或者说模仿,那么,Creator在可视化和易用性方面的起点自然不会太低,也正因为如此,作为Creator替身的VWP,才会成为真正支持JSF可视化开发的优秀工具。
其实,不论是JBuilder还是Eclipse,都是可视化开发工具的典范,只是在JSF应用开发方面,NetBeans走到了前面。这主要是因为NetBeans扎根于Sun这块沃土,能够吸取来自Sun专家组的智慧和力量。JSF是Sun的赌注,Sun在JSF上投入重兵,意欲抢占Web应用开发的市场份额,因此,为了与JSF配套的开发工具,Sun不惜倾其所有,把原先收费的Creator免费化,并移植到用户最多的NetBeans上。
毫无疑问,JSF的原理,Sun的专家组是最清楚的,正是基于对JSF技术来龙去脉的深刻理解,NetBeans才敢于在VWP中对JSF的开发进行大刀阔斧的创新。所谓艺高人胆大,凭借一系列开创性的手法,VWP终于突出重围,成为JSF可视化开发的领袖。
6. NetBeans在创新中前进
前面介绍的页面Bean就是一个创新的例子。如果说,页面Beans多少还有托管Bean的影子,还与JSF规范保留一些联系的话,那么,另一项创新,则与JSF规范彻底划清了界限,这就是VWP中的数据提供器。理论上,JSF只是一个表示层框架,与数据层相距甚远,中间还隔着一个应用层,因此,典型的JSF工具都只是在UI组件上下功夫。但是,Web应用的现实是,几乎所有Web应用都离不开数据库。推却责任的做法是把数据库访问的问题交给程序员自己去处理,或JDBC,或Hibernate,与JSF无关。
VWP没有这样做,而是承担起了这个责任,用一个称为数据提供器的组件,在页面和数据库之间开通一条绿色通道,极大地简化了Web数据库应用的开发。当然,从体系结构的观点来看,这条绿色通道越过了应用层,违背了应用分层的原则,不过,在小规模应用场合,这样做无伤大雅,丧失一定的可扩展性和可维护性,换来大批JSF初学者的莫大惊喜,所得显然远超所失。再者,如果一定要严守三层体系架构,VWP也是允许的。
Java太需要创新了,不是技术上的创新,而是简化Java开发方面的创新。一直以来,Java都是阳春白雪曲高和寡,一个Java初学者,往往要经过两三年的摸索和锻炼,才能叩开Java的大门。两三年是个不短的时间,程序员的职业生涯非常有限,尤其在中国,30岁还写代码的,可以凤毛麟角来形容。如果说期待一款三天就能开始做项目的Java开发工具不现实的话,那么用三个月时间成为一个Java Web开发的熟手,VWP应该可以胜任。
每个程序员都面临着项目的压力,如果不能提高开发效率,唯有用加班和熬夜来弥补时间和精力的不足了,我想,除了天生的工作狂,不会有人愿意这样。程序员要靠公司来生存,而公司要靠项目来生存,程序员需要一炉旺火一口好锅,能够快速炒熟一个项目,养活公司,养活自己。VWP无疑是Java Web程序员的一炉旺火一口好锅,支持最新的Java平台和JSF标准,用VWP开发Java Web应用,才能真正做到事半功倍。
我们期待NetBeans创新的步伐不要停止,希望VWP给程序员们奉献更多更强大的工具,提高我们的开发效率,让我们的生活变得轻松一些,惬意一些。NetBeans 6.0很快就会推出,而JSF的2.0版本也在酝酿之中,让我们在享受NetBeans 5.5和JSF 1.2带来的全新Java Web开发体验的同时,乐观地期待新的版本带给我们新的惊喜吧。
1. 工具是JSF曾经的痛
笔者自从数年前一个偶然的机会接触到JSF后,一直对JSF寄予厚望,而JSF也未曾负我,在诸多项目中成为我的得力助手,让我尝到了快速Java Web开发的甜头。有那么一段时间,只要有人和我谈论起Java Web方面的技术问题,我都会像个买瓜的王婆,拿出JSF来吹嘘一番。后来,在IT168上陆续发表了几篇介绍JSF的文章,被Itpub.net论坛转载,竟然在坛友中博得了一个“JSF狂人”的称号,一时之间,不知道是应该喜出望外,还是应该受宠若惊。非常巧合的是,“JSF”恰好是中文“教唆犯”的汉语拼音首字母,所以,每当我写完一篇JSF的文章,极力鼓动Java Web程序员转向JSF时,我感觉自己又当了一次“教唆犯”。其实,作为一个凡人,笔者既没有“先天下之忧而忧,后天下之乐而乐”的崇高境界,也不能实践“勿以恶小而为之,勿以善小而不为”的古训,之所以为JSF奔走呐喊,只是因为JSF曾经带我走出Java Web的泥绰,使得作为程序员的我,过上了稍微轻松一些的生活。在大批Java Web程序员仍然在JSP的乱麻中“剪不断,理还乱”时,我觉得自己有义务向他们介绍JSF,哪怕是出于同病相怜的动机也好。
尽管我费力地鼓吹JSF,其实在私底下,我不得不承认,JSF有一只痛脚。这只痛脚不是别的,就是工具的支持。关于JSF的优势,我可以如数家珍般娓娓道来,比如UI组件模型,比如事件驱动,比如集中式的页面导航等等,不一而足,不过,一旦有人问起“JSF比ASP.net如何”这样的问题时,我只好顾左右而言他,打个哈哈转移话题。在技术架构上,JSF比ASP.net有过之而无不及,且不说Java语言的广泛适用性,起码JSF与具体标记语言的无关性,就让ASP.net自愧弗如,而且,JSF是一个精心设计的框架,有着丰富的插入点,框架的任何一个特征,都允许用户用自己的实现去替代,在开放性方面,非ASP.net可比。可惜,这些优势只对专家有意义,在普通程序员眼里,ASP.net才是完美的开发环境,是程序员的利器。
在一个Microsoft Visual系列高度集成的开发环境里,用鼠标拖拖拉拉,写上不多的几行代码,然后一个功能强大的Web应用就诞生了。Microsoft彻底改变了传统的Web编程方式,ASP.net让程序员可以半躺在沙发上编写程序,一杯清茶下去,程序已经欢快运行。
Java Web的程序员就没有这么幸运了。JSF推出以后,虽然号称“designed to be tooled”,但能够真正支持可视化开发的IDE实际上并不多见,尤其是在开源领域,可以说几乎没有。JBuilder曾经是最好的JSF工具,不过,JBuilder对JSF可视化开发的支持,仅限于导航规则的编辑,而这其实对JSF应用的开发帮助不大。在JBuilder中,JSF的组件不是显示为一个图标,而是一个tag;当你试图从面板上拖放一个JSF组件到页面上时,你看到的也不是一个组件,而是一段代码。尽管如此,JBuilder还是在其介绍文档中声称支持JSF可视化开发,很让我兴奋了一阵,安装上以后才知道,此“可视化”非彼“可视化”也。也许是因为JBuilder名声太响,此后东施效颦者众,很多JSF的IDE都会弄一个导航规则的可视化编辑器出来,然后给自己贴上“JSF可视化开发”的标签,来吸引Java Web程序员的眼球。
直到NetBeans出现,这种状况才得到改变。
2. NetBeans的可视化开发
在Sun的JSF论坛中,对于NetBeans的评价,可以用“惊呼”二字来形容。JSF的开发工具非常多,有开源的,也有商业的,初学者在如此众多的工具面前,往往眼花缭乱,无法作出抉择。因此,论坛中常有JSF的初学者发帖子,询问用什么开发工具好。过来者们多半会推荐自己使用过或者正在使用的工具,不过,任何一种工具都是毁誉各半,有人说好,一定有人说不好。唯有NetBeans是个例外,用过的无不大加赞赏,极力推荐。
NetBeans的名字非常奇怪,第一次看到这个单词时,我还以为是JavaBeans的升级版本呢。后来才知道原来是个免费的开源Java集成开发环境。NetBeans可以运行在几乎所有的平台上,包括Windows, Linux, Solaris, and the MacOS。经过简单的安装过程后,程序员需要的所有工具,就都唾手可得了。
不管是桌面应用、企业应用、Web应用还是移动应用,NetBeans都可以给程序员提供全面的可视化支持。
在架构上,NetBeans类似于现今非常成功的Eclipse,在一个基础框架上,通过集成不同的插件或者工具包来扩展其功能。但与Eclipse相比,NetBeans最近的发展要迅速得多,大有后来居上之势。现在最新的NetBeans版本是5.5,这个版本已经具备相当丰富的功能。
例如,脱胎于Matisse项目的Swing GUI Builder,是一个直观的Swing GUI开发工具包,通过简单地从组件面板中拖放组件到界面上,然后编辑其属性,就可以完成用户界面的开发。在这个工具包的支持下,程序员甚至可以当着用户的面设计GUI原型,让用户马上看到自己的设想变为现实,提高沟通效率和用户满意度。
Web Application Development是用来开发Web应用的,支持JavaServer Faces (JSF)、JavaServer Pages (JSP)、持久化单元、Struts以及JSP的标准标签库JSTL。Web Application Development附带了一个部署描述符的可视化编辑器,为了方便Web应用的调试,还提供了HTTP监视器,可以记录和查看HTTP协议交互的细节。最值得称道的是Web Application Development对Web数据库应用的特别支持,只需几个步骤,就可以生成一个全功能的JSF网页,用来操控后台数据库表中的数据,例如查询、新增、修改、删除等等。
企业应用的开发支持则由Enterprise Development工具包提供,支持企业应用、EJB模块、Web应用和企业应用客户端的开发。这个工具包含有大量的向导,以前很复杂的开发过程,现在变得十分“傻瓜”了,例如nterprise Java Beans (EJB 3)和JAX-WS web services的开发等等。
在应用服务器方面,NetBeans内置了对主流应用服务器的支持,包括Sun Application Server、Tomcat、Weblogic9和JBoss 4,如此广泛的应用服务器支持,几乎可以满足任何Java应用的需求,而且更多的应用服务器还可以通过配置集成到NetBeans中。NetBeans支持J2EE 1.4和Java EE 5,包括JAX-RPC和JSR 109 标准。
除此以外,在典型的IDE中可以看到的功能,NetBeans都具备,例如版本控制、开发者协作、UML建模等等。NetBeans不但支持常规的Java应用开发,还支持Java ME和基于SOA架构的应用开发,甚至,NetBeans的C/C++工具包还提供对C/C++语言开发的支持,并且可以跨越Microsoft Windows、Linux和Solaris等不同的平台。对于需要在Java和C/C++两种语言环境下工作的程序员来说,拥有一套NetBeans就足够了。
3. NetBeans下真正的JSF可视化开发
前面罗列了NetBeans在Java可视化开发方面具备的功能,有了这些功能作为基础,NetBeans中JSF的可视化开发,可以说是水到渠成了。完成这一使命的,就是NetBeans最具价值的Visual Web Pack工具包。如同其他工具包一样,这个工具包也是免费的,不过,免费的Visual Web Pack工具包已经在很多方面超越了大多数商业开发工具,尤其是在JSF应用的开发上。
Visual Web Pack工具包给NetBeans提供了功能强大的开发工具,在这些工具的支持下,Web应用的开发速度得到极大的提高。可视化是Visual Web Pack工具包的核心目标,因此,Visual Web Pack工具包中含有多个可视化编辑器,可以利用诸如AJAX、CCS和JSF等技术,快速构建标准的Web应用。
谈到可视化开发,首先想到的肯定是Web页面的开发。用JSP技术开发Web页面是一个痛苦的过程,早期的JSP在页面上夹杂了太多的coding元素,使得JSP页面的开发和维护成为程序员的恶梦,虽然现行的JSP版本有了一些改进,但仍然存在诸多不足。JSF是Sun简化Web开发的一种尝试,在Visual Web Pack工具包支持下,这种尝试取得了极大的成功。创建一个页面,从面板上拖放组件到页面上,编辑组件的属性,编写事件处理例程,从Visual Web Pack开发Web页面的步骤中,已经看不到多少“Web”的东西了。当然,Web应用和桌面应用有着本质的不同,不过,Visual Web Pack已经封装了这二者之间的差异,感觉上,Web应用和普通桌面应用的开发过程完全一样。
除了页面上的UI组件外,Visual Web Pack甚至将可视化的概念扩展到了其他JSF组件。例如,JSF的转换器和验证器,它们原本不是可视化组件,不过,在Visual Web Pack下,为一个可视化组件绑定转换器和验证器的过程,如同为页面添加UI组件一样,也是简单的drag-and-drop。这得益于JSF的高度模块化设计,任何编程元素都是component,都可以drag-and-drop。
可以drag-and-drop的还不止这些,复杂的数据库编程,也已经被Visual Web Pack可视化了。配置好数据库后,从页面访问数据库表中记录的最简单方法只有两个步骤:第一,在页面上放置一个用来显示数据的UI组件,例如下拉列表组件;第二,将一个表直接拖放到UI组件上。就这样,无需任何代码,运行时,这个下拉列表组件将显示出表中第一个非键列的所有记录值。这在Web数据库应用中非常有用,例如,通过这样的两次drag-and-drop操作,你就可以在电子商务网站上显示商品类别的清单,供用户选择。如果这样过于简单,不能满足你的需求的话,那么,你也可以选择更精确的方法,将表拖放到页面上(而不是组件上),然后通过“绑定到数据提供器”,选择你希望在列表中显示出来的字段。这样,你可以不单显示商品类别的名称,还可以同时显示对商品类别的简单描述等等。
页面导航是Web应用所特有的要求。与其他框架不同,JSF的页面导航是集中式的,这是JSF的一个创举。Web应用是由页面组成的,当应用的规模增大,页面数量也随之增加到一定程度时,在页面中导航,有点类似大海航行,容易让人摸不着方向。分散式的导航控制在小规模应用场合下,简单易行,不过,大规模应用更适合采用JSF集中式的导航控制。Visual Web Pack提供了一个可视化的页面导航设计器,打开设计器,Visual Web Pack自动将应用的所有页面显示为一个个小图标,而所谓的导航,只是从一个页面拖动一条连线到另一个页面,仅此而已,形象而又直观。一条连线称为一个出口,给出口命名后,在代码中就可以通过选择出口来导航到指定的页面。
4. NetBeans的创新
限于篇幅,上面所介绍的,并非NetBeans可视化特征的全部,NetBeans的Visual Web Pack和JSF珠联璧合,在Java Web的可视化开发方面,向前迈出了非常成功的一步。
熟悉JSF的读者一定知道,JSF面世已经好几年了,虽然JSF的可视化开发工具一直在进步,不过推进速度显然不尽人意。包括Borland等在内的大牌IDE工具提供商,花了几年的时间,也没有能够推出一个让程序员得心应手的JSF可视化开发工具,为什么NetBeans的Visual Web Pack能够取得如此巨大的进步?在NetBeans可视化JSF应用开发的背后,到底隐藏着什么玄机?
要解答这些问题,还得从JSF本身说起。JSF是Java Web框架发展历程上的一个特立独行者,集简单和复杂于一身,而且是典型的极端主义。一方面,JSF的设计目标是简化Java Web开发,另一方面,JSF本身又是迄今为止最复杂的Java Web框架。这是JSF的两个特点,前一个特点由于工具的缺乏,并没有得到很好的发挥,倒是后一个特点,早被Sun的专家们有意无意地“推广”得家喻户晓了。
别的不说,一个被划分了六个阶段的请求处理生命周期,就足以让百分之九十的初学者望而却步了,剩下百分之十迎难而上的无畏者,半途中恐怕又被复杂的“模型”“模式”难倒一大片。只有大难不死的几个好钻牛角尖者,费九牛二虎之力弄明白了JSF的理论后,却发现缺乏工具支持的JSF,其实只是“看上去很美”。
没有工具支持的JSF,像一个迷宫,到达出口的路径有无数条,程序员宝贵的时间,大半浪费在选择一条合适的路径上了。工具对JSF来说举足轻重,但工具厂商如果只把思路局限于JSF的规范之内,那么,工具无非是给迷宫的道路铺上水泥而已,路虽然好走了,但解决不了方向性的问题。很多开发工具只是在做铺路的工作,包括大名鼎鼎的JBuilder以及Eclipse下种类繁多的JSF插件或插件包。
NetBeans终于在这方面有所突破,Visual Web Pack不但铺了路,还给迷宫架上了一座座桥梁,化繁杂为简洁,在迷宫入口与出口之间建立了直接的联通道路,彷佛现代城市中的立交桥和高架路。Visual Web Pack采用了很多项技术,来降低JSF框架的使用难度,这些技术,有的严格遵循JSF规范,有的是对规范的扩展,有的甚至与JSF规范的建议相左,不管怎样,采用了这些创新技术的NetBeans,把其他JSF工具远远地甩到了后面。
比如页面Bean就是Visual Web Pack的一项创新技术。当程序员在NetBeans中创建一个网页时,NetBeans自动地创建一个同名的页面Bean,并将这两者绑定在一起。JSF规范本身并没有页面Bean这个概念,有的只是托管Bean。页面Bean其实就是托管Bean,只不过因为它和页面有一一对应的关系,NetBeans将其称为页面Bean,以彰显其特别的用途。
托管Bean和绑定,都是JSF的标准技术,不足为奇,但将这两项技术组合起来,就是一个创举。做过JSF开发的程序员,恐怕都为页面和托管Bean的对应关系烦恼过,是一对多、多对一,还是一对一、多对多,不同的程序员有不同的选择,甚至同一个程序员一觉醒来,也可能完全推翻自己昨天的设计。在NetBeans中,这个不再是问题了,Visual Web Pack自动建立一对一的关系,自动以实例绑定的方式沟通页面组件和Bean属性,自动维护页面和页面Bean的同步,自动保持数据的同步更新等等。有了页面Bean,如果你想在代码中访问页面组件,直接访问页面Bean就行了,它是页面的编程逻辑,是Java代码形式的页面。
5. 来自沃土的智慧和力量助NetBeans成长
当我第一次使用Visual Web Pack时,有一种似曾相识的感觉,尝试新建一个页面后,终于发现,原来Visual Web Pack和Sun Java Studio Creator如出一辙。事实上,Visual Web Pack(以下简称VWP)就是Sun Java Studio Creator 2(一下简称Creator)的替身。
NetBeans已经发展多年,不过,一直是Java高手的开发工具,并非面向Java初学者的。2001年,当Sun意识到自己缺乏一个对初学者有吸引力的IDE时,决定开发一个全新的IDE,这就是后来的Creator。
2004年,当JSF推出时,Creator是第一个支持可视化JSF页面开发的IDE,我试用过几天,发现确实不错,可惜,Creator对内存的要求太高,在普遍只有512M内存的情况下,最终还是放弃了Creator,继续使用JBuilder。
Creator和NetBeans有着千丝万缕的关系,它们基于相同的代码库,只不过Creator借鉴了VB/ASP开发者们常用的IDE的设计理念,强调可视化和易用性,目标显然是降低Java开发的难度。而NetBeans则突出了与Java标准和规范的同步性,一旦有新的Java技术出现,NetBeans很快就推出新版本。维护两套开发工具显然不符合经济原则,因此,当Java走向 EE 5,JSF跨出1.2的步伐时,Sun决定将Creator纳入NetBeans的版图,这就是NetBeans的工具包VWP。
VWP 和Creator的这种紧密关系,说明了为什么VWP在易用性方面这么突出。VB可以说是最容易使用的开发语言之一,既然要和VB的开发工具竞争,或者说模仿,那么,Creator在可视化和易用性方面的起点自然不会太低,也正因为如此,作为Creator替身的VWP,才会成为真正支持JSF可视化开发的优秀工具。
其实,不论是JBuilder还是Eclipse,都是可视化开发工具的典范,只是在JSF应用开发方面,NetBeans走到了前面。这主要是因为NetBeans扎根于Sun这块沃土,能够吸取来自Sun专家组的智慧和力量。JSF是Sun的赌注,Sun在JSF上投入重兵,意欲抢占Web应用开发的市场份额,因此,为了与JSF配套的开发工具,Sun不惜倾其所有,把原先收费的Creator免费化,并移植到用户最多的NetBeans上。
毫无疑问,JSF的原理,Sun的专家组是最清楚的,正是基于对JSF技术来龙去脉的深刻理解,NetBeans才敢于在VWP中对JSF的开发进行大刀阔斧的创新。所谓艺高人胆大,凭借一系列开创性的手法,VWP终于突出重围,成为JSF可视化开发的领袖。
6. NetBeans在创新中前进
前面介绍的页面Bean就是一个创新的例子。如果说,页面Beans多少还有托管Bean的影子,还与JSF规范保留一些联系的话,那么,另一项创新,则与JSF规范彻底划清了界限,这就是VWP中的数据提供器。理论上,JSF只是一个表示层框架,与数据层相距甚远,中间还隔着一个应用层,因此,典型的JSF工具都只是在UI组件上下功夫。但是,Web应用的现实是,几乎所有Web应用都离不开数据库。推却责任的做法是把数据库访问的问题交给程序员自己去处理,或JDBC,或Hibernate,与JSF无关。
VWP没有这样做,而是承担起了这个责任,用一个称为数据提供器的组件,在页面和数据库之间开通一条绿色通道,极大地简化了Web数据库应用的开发。当然,从体系结构的观点来看,这条绿色通道越过了应用层,违背了应用分层的原则,不过,在小规模应用场合,这样做无伤大雅,丧失一定的可扩展性和可维护性,换来大批JSF初学者的莫大惊喜,所得显然远超所失。再者,如果一定要严守三层体系架构,VWP也是允许的。
Java太需要创新了,不是技术上的创新,而是简化Java开发方面的创新。一直以来,Java都是阳春白雪曲高和寡,一个Java初学者,往往要经过两三年的摸索和锻炼,才能叩开Java的大门。两三年是个不短的时间,程序员的职业生涯非常有限,尤其在中国,30岁还写代码的,可以凤毛麟角来形容。如果说期待一款三天就能开始做项目的Java开发工具不现实的话,那么用三个月时间成为一个Java Web开发的熟手,VWP应该可以胜任。
每个程序员都面临着项目的压力,如果不能提高开发效率,唯有用加班和熬夜来弥补时间和精力的不足了,我想,除了天生的工作狂,不会有人愿意这样。程序员要靠公司来生存,而公司要靠项目来生存,程序员需要一炉旺火一口好锅,能够快速炒熟一个项目,养活公司,养活自己。VWP无疑是Java Web程序员的一炉旺火一口好锅,支持最新的Java平台和JSF标准,用VWP开发Java Web应用,才能真正做到事半功倍。
我们期待NetBeans创新的步伐不要停止,希望VWP给程序员们奉献更多更强大的工具,提高我们的开发效率,让我们的生活变得轻松一些,惬意一些。NetBeans 6.0很快就会推出,而JSF的2.0版本也在酝酿之中,让我们在享受NetBeans 5.5和JSF 1.2带来的全新Java Web开发体验的同时,乐观地期待新的版本带给我们新的惊喜吧。