以下内容转自:
http://soja.sourceforge.net/blog/index.html
Discover GWT's host mode
GWT有一个相当神奇的功能就是能够在Host模式下进行调试,那么它是如何进行工作的呢?本文试图解答下述的问题:
1、 Module.onModuleLoad() 方法是如何被调用的?实际上onModuleLoad是每一个GWT应用的入口点,能够将执行的控制权转移到onModuleLoad即启动了一个GWT 应用程序。
2、在Java代码中如何执行 JSNI 代码。实际上,GWT的一些低层的任务还是通过 JSNI 借口来完成的,比如说:DOM.getElementById实际上是等同于:
public native Element getElementById(String id) ;
3、 在JSNI的script代码中,又是如何的访问Java对象的字段、方法呢?
基本上,理解了上述3个问题后,基本上就可以明白GWT的 Host工作模式了。
1、GWT使用了 eclipse swt 来构建HOST模式的用户界面,在其中嵌入了一个浏览器(在我的机器上,是IE浏览器),GWT同时使用了SWT提供的访问os native/COM的相关机制。对于浏览器窗口,GWT在其中设置了一个external 变量,window.external, 现在这个window.external 指向的 IDispatch 对象实际上是一个 Java 对象来的,对其的方法调用将变为对java代码的调用。
GWT的启动代码即 gwt.js 中包括了:
function __gwt_initHostedModeModule(moduleFrame, moduleName) {
if (!window.external.gwtOnLoad(moduleFrame, moduleName)) {
// Module failed to load.
//
if (__gwt_onLoadError) {
__gwt_onLoadError(moduleName);
} else {
window.alert("Failed to load module '" + moduleName + "'.\nPlease see the log in the development shell for details.");
}
}
}
在 浏览器装载入 html 后, gwt.js 中的 _gwt_initHostModelModule 方法被调用,这个js方法就调用 window.external.gwtOnLoad 方法,从而执行其 Module.onModuleLoad 的方法,对整个GWT程序进行初始化。
2、在Java中如何调用javascript的方法,实际上,所有的JSNI被GWT编 译器编译成为一个 javascript 方法,并且保存在 window 对象中,一般的,demo.DemoClass.method() 被保存成为一个 @ demo.client.Demo::bar(Ljava/lang/String;) 形式的函数。实际native的java代码被替换成为对这个 javascript 的调用。
如何调用呢? 通过COM API: window.call("function_name", arguments)
3、在 JSNI 中如何调用 java 的方法,或者访问 java 的变量呢?实际上,在调用javascript方法前,所有的Java对象被包装成为一个 IDispatch 对象,javascript 中 对这些对象的访问都会动态的调用回 java.
- 大小: 33.7 KB
分享到:
相关推荐
一个文件恢复工具discover的源码 一个文件恢复工具discover的源码
gsoap实现onvif discover教程文档十分详细 物有所值
Oracle discover基本操作手册
利用 McAfee DLP Discover,贵企业可以轻松防范数据丢失。与要求您确切知道要保护哪些内容的传统解决方案不同,McAfee DLP Discover全面覆盖了明确要保护的信息,并可帮助您找到非明确要保护的信息。要识别信息和...
Laravel开发-laravel-discover Laravel后端系统。它包含一些基本模块,如角色、权限、菜单、日志查看器、审核、设置等。
Discover桌面版安装软件,亲测适用win7、win10 32/64位系统。安装后请安装补丁。
Laravel开发-laravel-discover .zip
详细介绍了discover的操作方法。很直观,一目了然。
DISCOVER-分布式视频编码框架,可以用于实验对比。
行为风格理论,DISC内核,DISC的挑战和优势,DISC典型特质与相处原则,防止优势成为劣势,解读DISC性格分析报告 ...把DISC用活,调整自己的性格特质,平衡工作与家庭,《DISCover自我探索》读书笔记ppt模板。
省钱快报分类列表 项目只适合分享,学习,交流,切勿作为商用!!! 目录结构 开发环境 更新日志 应用截图 下载地址 项目中使用到的三方库说明 项目反馈 Issuse Me 一.开发环境 ...二....三....四....五....
STM32F407VGT6_Discover-MO
Discover 是一个基于 Dcat-admin 开发的进销存系统
DHCP Discover:客户端在初始状态下没有 IP 地址,因此向网络中广播 DHCP Discover 报文,请求可以分配 IP 地址的 DHCP 服务器响应。 在这个过程中,客户端使用 0.0.0.0 作为源 IP 地址,使用 255.255.255.255 或...
前端开源库-discover-source-path查找源路径,查找正在执行的当前函数的源文件路径
Oracle_EBS_Discoverer实例详解
C# Deconstructed Discover how C# works on the .NET Framework 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源...
Discover the aREST framework is organised in several sections, going from the basics of the framework to building mobile applications. You will learn how to control any type of boards supported by ...
NULL 博文链接:https://teddywang.iteye.com/blog/754671
docker-discover, Docker 容器的服务发现 docker发现是一个利用haproxy和etcd的服务发现容器。 运行时,它为通过etcd发现的远程 Docker 容器设置侦听器。 它与docker寄存器协同工作。它们一起实现了服务发现插件,...