`
wsc830719
  • 浏览: 163589 次
  • 性别: Icon_minigender_1
  • 来自: 唐山
社区版块
存档分类
最新评论

GWT 与ECHO3

    博客分类:
  • RIA
阅读更多

Java的RIA技术实在多的很。光比较就需要很多的时间。当然了,没有防止四海而皆准的框架,每个框架都是基于特定的目的产生出来的,他们都有适合的工作场所。 不过底层的东西都一样。

 

GWT是用Java代码生成js和html,然后发给客户端使用,当需要和服务器交互时,就发送数据到服务器,然后等待服务器的回复。因此对服务器的压力相当的小。这就是它的特点了。不过开发时非常的昂贵,需要好点的电脑,它编译时需要耗费高昂的内存,需要花费很多的时间。做个对比,甚至比开发EJB都耗费资源。

 

最基本的GWT不能满足需求,必须做组件的扩展开发,或使用第三方组件

 

 

ECHO 正好相反,开发时相当节约资源和时间,和开发jsp基本一样的开销。不过实际运行时显然高昂的多。我在GWT文章中的最后写了些echo的特点,以3.0来说的,现在粘贴如下(最后给出):

 

这里,我只说echo组件都可以拿来就用,但是严格来说,每个组件都是半成品,需要你自己做成需要的组件,包括组合和扩展。即尽量把在客户端的处理放到客户端。它提供了面向对象的js框架做这些工作。

 

比较扩展机制:

 

 GWT扩展是灵活的,简单的扩展需要很少的知识,只需继承相应的基础组件以及实现你需要的接口,比如按键监听器、改变监听器等。可以说就是需要一个简单的Java类,至于多复杂完全取决于你的需求,因为如果你想和extjs一起用,当然需要更复杂的知识了。

这里是一些扩展组件的代码可以看看:http://gwt.components.googlepages.com/

 

ECHO扩展是固定的。你必须看下官方的扩展说明,需要大概2个小时的学习时间,并具备js基础 和一定的Java基础。

做个echo组件需要固定的格式以及固定的几个Java类与之对应。 因此它是固定的。方法以及需要继承的类都是固定的,你仅仅需要在相应的方法里写你自己的核心处理代码,至于注册组件以及关联上下文都是上层抽象类自动完成的。

总结起来:

1 做一个完全客户端的js,即通过html里直接调用的那种,需要1个js文件

  继承它的js组件基类,然后在你需要的方法内完成你的业务逻辑,比如焦点获得失去、按钮按下。在你的代码中,你可以调用echo提供的布局组件以及小部件。因此可以说是面向对象的类似swing的那种js开发。

2 上述js只能在html、jsp等传统页面中使用,如果需要在echo应用里使用你需要:

2.1 客户端的呈现器类,负责呈现的,并与服务器端同步状态。

2.2 服务端的与之对应的组件类, 用于服务器端产生一个单例,然后保存它的字段数据到与之对应的用户上下文。

2.2 服务器端的呈现器  负责接收用户端的状态数据等,以及向客户端发出新的状态,然后客户端的呈现器去呈现新状态。

2.3 把这些关联起来,格式是固定的,就是在上述类中加上特定的注册代码。还有一个属性文件,用于关联组件和呈现器类。

 

具体过程,参考官网的开发指南。

 

从这里看出echo的扩展过程还是比较繁琐的。但是echo3支持纯js开发,并且提供了面向对象的js框架以及组件。

但是开发可以重用的组件还是需要上升到服务器的协同开发,需要共5个文件,而且是最少就需要5个,其他的你可以添加

js库作为客户端的js功能的实现,比如jquery protype等等库,随便用。还有js框架提供了和服务器通信的机制,俨然一个ajax框架。

 

具体哪个方案,你可以根据需要来使用,可见echo的应用范围(echo3),其实比gwt要广,因为echo框架自己处理生命周期,包括资源的分步下载,比简单的使用js应该有很多优势。框架能把组件上升到Java类,以达到富客户交互能力,尤其数据量很大的交互,用它来写非常方便,因为echo提供了客户端-服务端数据间同步的基础设施,我们仅仅需要注册下就行了,这里注意一点:样式的变量是自动关联的,不需要注册。

 

 

我在gwt一文提到的与echo相关的内容:

 

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的架构思想也是围绕这些展开的。

 

希望本文能够为刚刚接触这两个框架的新手,提供一个指路灯。减少摸索时间。

当然,如有不当之处,敬请指出。同时我也强调,我也是才刚刚读完echo的文档以及官方的开发指导。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics