netbeans提供了与eclipse下同等的gwt插件,并且风格与netbeans web(如jsp+servlet)一致。
当前版本即netbeans6.8更新中心带的gwt插件是2.6.14版本。
该版本提供了最基本的功能,但是不建议安装这个,可能很多人不知道,其实去它的插件网页下载最新的容易获得最新的特性。这点已经体现在好几个插件上了。比如ireport插件,按照更新里的安装,就不如去ireport官网下的那个功能全。再比如UML插件 官网给的插件明显比开发的那个官网网站的插件旧很多。
现在讨论的是GWT,它的插件开发网址是 http://gwt4nb.dev.java.net/
可以到这个页面下载最新的2.6.20版本,这个版本相比2.6.14多了很多功能:
1 多了3个向导,14版只有建立RPC向导,而20版本,还有:
创建 GWT常量;创建GWT模块;创建UiBinder 三个向导。
这个UiBinder 是GWT2里的新特性,它可以通过xml文件来定义UI的布局以及样式。使得GWT不必太依赖可视化的设计工具了,它的编写和HTML语法类似,确切的说就是和faceslets学的,就是靠标签来体现的。
2 布局及样式xml文件,增加了标签自动补全以及智能提示功能。这个14版本是没有的。
有了GWT2以及这个20版本的插件,基本上做GWT开发应该是又容易了很多,在netbeans下做开发的朋友不妨去试试了。
当然eclipse下有GWT designer可视化设计工具,这是netbans比不了的,不过这个插件是收费的。而Google官方推荐的那个插件就是和netbeans类似的。不过由于GWT2的到来,使得布局就像HTML那样容易,就使得可视化开发不必须了。你要是熟悉手写html的话,就马上就可以上手了。
如果你稍微深入或了解下GWT,就会想知道GWT的外观扩展。这里节约你的时间,我给你介绍下:
mygwt已经停止了,它以前排名第一,不过早不存在了,库也很老,它合并入ext了,ext收费了,GWT-ext,呢也差不多,因为ext收费了,这两个我们一般就不考虑了。
而ext-gwt呢也停止了,开始了一个smartgwt的完全的东西,ext-gwt主页上推荐到smartgwt,smartgwt由smartclient合成而来。这个是目前最强大的库,发展也很快,gwt出了2.0,它也更新到2.0.因此这个是首选了了。
它分免费版和企业版,企业版肯定是要收费的。
另外一个就是GWT的孵化器了,组件很少,是GWT的组件的前沿使用场所,通过的就加入正式库,我看了,基本没使用价值。
千万不要认为netbeans耗费内存了,gwt编译都比他多的多,看看调试模式下的内存占用吧:
我的netbeans从早上跑到现在了,本来就是完整功能版本还安装了ireport报表插件 gwt插件 ,而我做的测试,gwt+smartgwt整合,就只是一个按钮ImgButton ,看看调试运行的内存占用吧:
把netbeans的内存压到100M了。真是奇怪,gwt编译及运行居然这么高消耗。比EJB还要高耗呀。
我感觉GWT,犹如EJB般昂贵,甚至有过之而不及。它的编译尤其要是使用第三方类库的情况下,需要几百M的内存。此外,编译时间很长。
因此,就这两点来讲,大大阻碍了它的流行。
另外,既然是富客户应用,那么和后台的交互通常会相当多,除非只是为了在客户端展示效果,带有很少的交互数据,但是这种情况,使用JQuery extjs之类的不是更好吗?何必使用这么大的一个家伙呢。
因此,这里有个更彻底的ajax框架 ——echo,现在到3.0beta8了,加入了客户端js。应该来说做的更彻底了,直接在服务端保存用户数据,而只把用户数据发到客户端,而客户端用对应的js组件去展示数据。 每个服务端的Java组件都有一个客户端的js组件与之对应。理解这点很重要,因为要想用好它,做自己的组件相当的需要。
他俩的区别吧,可以说正好相反,一般的区别网上有,我就不废话了:
1 首先echo是由servlet生成一个Java类,当然他们是单例的,这个Java类保存在服务器上,并通过固定的接口方法把js文件发给请求的客户端,这样就建立了对应关系。只有客户端请求到某些类时,相应的js才会发给客户端。
2 有人说,echo耗费服务器,说是靠服务器生成swing图形,然后响应客户端,这是大错特错的,它只是保存一个javabeans对象,然后与客户端的js组件对应,js组件通过事件代码,把一些值发到服务端,这些值保存在用户上下文中,而对应的组件只有一份。如果使用消息队列,那么客户端会周期地询问服务端,默认是500毫秒。因此,只要js组件产生事件,而这个事件中改变的属性值做了服务器端的关联,那么就需要与服务器端连接,所有才耗费服务器的。
因此,可以多安装几个服务器,比如tomcat就应该行了,因为它需要的连接太频繁。
之所以说它比GWT耗费资源,我觉得2点: 1 连接频繁 2 session(用户上下文:app实例及相关实例)需要保存很多用户数据。当然按照它的说法,session不活动时(钝化)会把用户数据移到硬盘上把内存留出来给其他用户使用。
所以,我们不能说它是因为使用了类似swing的组件才耗费服务器的,因为它只有一份,任何动态网站都需要服务器储存数据,echo肯定是多了东西,但是这不是决定因素。
3 客户端的js框架和服务端的Java组件 API是一样的。因此js是面向对象的语法,如果做对比的话,有点像javafx、flex等的形式。服务端的组件和js组件一样用。因此,如果注重性能,可以多做客户端的组件,而少做关联,即少与服务器通信。
上面提到,js组件和服务端Java组件API是一模一样的,因此,每个动作都要与服务器端通信的。正是这样,echo的组件都是具备必须的事件。 可以看下API,Java组件都没有鼠标的移动事件,否则的话,自己想象下就有意思了。
要想做到这些,你想要继承现有组件(这里是指客户端js组件),添加你感兴趣的事件,不需要和服务器关联的就不关联,只在客户端运行。比如客户端js验证,这个你总需要吧。
总结:echo组件都不应该拿来就用,一般最好的实践就是扩展他们。echo的架构思想也是围绕这些展开的。
先到这,我会专门开个文章介绍下echo3.以及如何才能在netbeans下做相应的开发。