`
923080512
  • 浏览: 187273 次
  • 性别: Icon_minigender_1
  • 来自: 商丘
社区版块
存档分类
最新评论

gwt api 的层次结构

    博客分类:
  • GWT
gwt 
阅读更多

gwt api 的层次结构

这里所指的gwt api 主要是指有关界面/组件部分的api, 其它rpc,xml解析等不在讨论之列.

gwt 的整个api是分层构造的, 适当了解这些层次及其关系,有助于我们更好地掌握和使用这个伟大的工具.如图:


红线之下是javascript 的世界, 红线之上是gwt的世界, 我们可以看到gwt 一共分为四个层次, jsni/javascript overlay type , dom api , widget/组件 , 应用程序.下面逐一对各层进行说明.

 

jsni, javascript overlay type

 

jsni, javascript overlay type 是整个gwt体系中实现javascript 和java 交互的核心 .

  • 先说jsni, jsni 全称是 javascript native interface. 在java 的类中,将一个方法标注为native之后, 使用gwt 规定的语法,就可以用javascript 来实现这个方法,例如:
Java代码  收藏代码
  1. public static native void alert(String msg) /*-{ 
  2.     $wnd.alert(msg); 
  3.   }-*/;  

这是gwt  Window 类中的源码--一个标准的jsni 方法, 我们可以看到,方法实现就是一行简单的javascript 代码. (这里没有用 alert 或者 window.alert 的原因是: gwt 代码运行在一个iframe中,如果直接用alert或者window.alert,引用的是iframe文档,而不是host page 文档). 经过这个方法包装,以后在gwt程序中使用 " Window.alert"  实际上就是调用了javascript 的 alert 方法,当然你也可以不用这个封装, 直接实用 $wnd.alert .

 

  • 再说 javascript overlay type. ,这是官方对javascript overlay type 的介绍文档 ,简单来说呢,一个从JavaScriptObject 继承的类称为 javascript overlay type, 它的意义在于: 在java 中看来,这个对象就像一个真正的javascript 对象一样,它所有的属性,方法,在jsni method 中都可以用this 关键字访问到. 官方文档中举了一个json 的例子说明,实际上JavaScriptObject 对应的可以是任何javascript 中的对象,包括 document.getElementById 这样的dom 对象. 这样一来,大大简化了在gwt 中集成javascript 功能需要做的工作, gwt自己的dom api 整个就是在 javascript overlay type 和jsni 的基础上构建的. 看下面的gwt 源码:

 

Java代码  收藏代码
  1. public class Node extends JavaScriptObject  
  2.   
  3. public final native <T extends Node> T appendChild(T newChild) /*-{ 
  4.     return this.appendChild(newChild); 
  5.   }-*/;  

 

 

Java代码  收藏代码
  1. public class Document extends Node  
  2.   
  3. public static native Document get() /*-{ 
  4.     return $doc; 
  5.   }-*/;  

    第一段代码说明 Node 类 从 JavaScriptObject 继承, appendChild 方法内部的javascript 代码中使用了 "this"关键字,说明在运行时,这个Node 就是一个真实的dom对象. 第二段代码说明Document 从Node 继承, 所以也是一个"javascript overlay type" , 并且我们调用Document.get 获得一个Document 对象时,得到是 "$doc" 这个javascript 对象. (和上面的 $wnd 一样, $doc 指向的是 host page).

 

  以上所述是以浏览器内置的dom对象和gwt自己的dom 抽象层而言,实际上jsni 和javascript overlay type 可以和第三方的javascript 库工作. gwt flash bridge 这个项目在 flex ajax bridge 的基础上, 在gwt 中实现了类似gwt dom api一样的java 接口,通过这个接口,理论上可以实现在gwt完全通过java 来操纵flash 平台 api. 这样就可以灵活集成flash 平台的一些优秀特性到gwt的程序中. 下面是一个基于gwt flash bridge 实现的上传的demo截图.

实现的特性包括: 客户端文件检测和限制, 排队上传, 进度显示, 状态显示, action(取消/删除等). demo 地址在 这里

(注意如果打开了防火墙尤其是卡巴斯基,可能看不到上传的进度) 

 

dom api

 

 dom api 实现了java 语言中的浏览器dom接口, 并且通过这个层次,可以封装不同浏览器的区别,gwt 中的组件使用 dom api 完成dom 的编程(某些地方也直接用jsni). 对于应用程序来说,需要的话,也可以使用dom api 直接处理dom 节点,而不仅仅局限于使用组件.

 

widget/组件

 

应用程序多数时候是使用widget 来构造用户界面, widget 自动管理相关的dom 节点的创建,parent-child 关系维护,以及提供了组件级别的事件系统.使得构造应用程序界面更为容易.

 

应用程序

 

gwt 的应用程序通过在 module 定义一个入口(entry-point)来实现(得到调用), onModuleLoad 方法类似于java 或者c中的 main(), 应用在这里完成所有必要的初始化工作. 值得一提的是,gwt 的应用不是必须要有用户界面的,一个应用可以用java 语言实现一些功能,然后在onModuleLoad中将这些功能安装到javascript 的命名空间中,然后在javascript 代码中就可以使用这些功能了.

应用程序中,可以根据需要,使用widget, 使用dom api, 或者直接使用jsni,java overlay type.

 

 

综上所述,gwt 是一个强大而又非常灵活的技术 , 可以根据需要灵活使用,既可以把整个page 当作一个应用,使用gwt来构造,也可以定义页面的某些区域使用gwt构造的界面,甚至可以仅仅是用gwt实现一些功能,然后export 给javascript 使用.

gwt 提供了jsni 和javascript overlay type,用于实现java 和javascript 的紧密集成,于是,任何在javascript 中 可以做的事情,在gwt 中都可以做 .

转自: http://duker.iteye.com/blog/365678

分享到:
评论

相关推荐

    最新GWT API

    最新GWT API 最新GWT API 最新GWT API

    GWT API API GWT

    GWT API GWT学习不可少 GWT API参考学习

    GWT API帮助文档

    gwt api帮助文档,英文原文,网页格式的

    GWT-API.rar

    GWT API文档(史上最全),通过java写WEBUI,开发必不可少的文档,Gwt将不同模块页面生成到相关文件及页面,使用IFrame方式将各个模块组合在在HTML页面中

    GWT API 参考手册

    GWT 2.4.0 API 参考手册

    SmartGWT 2.2 API DOC.chm

    2010年8月3日制作,SmartGWT 2.2 API DOC chm版 方便的检索功能,支持全文检索

    SmartGWT1.3 API

    SmartClient libraries + GWT 的结合物,由Sanjiv 大大创办,API 版本1.3

    GWT2.3_API.zip_GWT 2.3.0 api_Validator gwt2.3_gwt api chm_gwt ap

    最新的GWT2.3的API,根据官方做的CHM,希望对大家有帮助-英文版

    SmartGWT2.0 API

    在Google发布GWT2.0不久,SmartGWT 2.0也发布了,功能更强大,界面效果一流,个人感觉比GXT好用多了,尤其在大量数据处理方面有很多优势!

    GWT_1.7_API

    自己做的GWT 1.7的API文档 有需要的可以下载

    gwt 2.4.0 api参考手册

    GWT 2.4.0 API 参考手册 GWT 2.4.0 API 参考手册 GWT 2.4.0 API 参考手册

    GWT-api文档

    公司以前的老项目用到了 GWT 一般的话现在想新项目都很少见这种东西了,主要给后台人员只需要写JAVA代码实现页面UI编写,也就是用java代码写前端的页面。

    ext gwt的api文档

    gxt(又叫做ext gwt)是GWT的一个框架,该框架完全copy了Extjs的用户界面,本文档是gxt的api文档,并且是chm格式的

    GWT 2.3.0 api

    GWT 2.3 api ,chm GWT 2.3 api ,chm GWT 2.3 api ,chm

    GWT API ( v1.7.1)

    不多说了,大名鼎鼎的 GWT 1.7.1 API

    GWT API ( v2.0)

    不多说了,还是是大名鼎鼎的 GWT 2.0 API

    GWT-API 帮助文档

    GWT-API 帮助文档 学习GWT用到的帮助文档

    EXT-GWT 2.1.0 API Doc chm版(新版本已可用)

    EXT-GWT2.1.0 java api 文档 chm格式方便查找2010年7月制作 完美的搜索,支持全文检索功能。另新版本EXT-GWT2.2.0 java api 已可用请到http://download.csdn.net/source/2700814 下载

    gwt-2.0.0API.CHM

    gwt-2.0.0API.CHM Google Web Toolkit (GWT)是一个开源的工具集,可以让Web开发人员用Java语言创建和维护复杂的JavaScript前端应用程序

    gwt API解析手册

    Easy CHM是国华软件推出的一款强大的CHM电子书或CHM帮助文件的快速制作工具。使用EasyCHM只需要三个步骤就可以完成CHM的制作:1、用户指定一个目录,EasyCHM会自动导入全部目录及文件;2、设置CHM编译选项;...

Global site tag (gtag.js) - Google Analytics