GWT有一个相当神奇的功能就是能够在Host模式下进行调试,那么它是如何进行工作的呢?本文试图解答下述的问题:
1、Module.onModuleLoad() 方法是如何被调用的?实际上onModuleLoad是每一个GWT应用的入口点,能够将执行的控制权转移到onModuleLoad即启动了一个GWT应用程序。
2、在Java代码中如何执行 JSNI 代码。实际上,GWT的一些低层的任务还是通过 JSNI 借口来完成的,比如说:DOM.getElementById实际上是等同于:
public native Element getElementById(String id) /*-{
var elem = $doc.getElementById(id);
return elem ? elem : null;
}-*/;
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.
分享到:
相关推荐
《Discover文件恢复源码解析与应用探讨》 Discover是一款专门用于文件恢复的工具,其开源的特性使得开发者和爱好者能够深入研究其内部机制,从而更好地理解文件系统的运作原理,以及如何在数据丢失的情况下进行有效...
**Laravel 开发详解:Laravel-discover 模块化后端系统** Laravel 是一个基于 PHP 的优雅、强大且富有表现力的框架,被广泛应用于构建高效、可扩展的 Web 应用程序。在“Laravel-discover”项目中,开发者已经构建...
"误删文件恢复discover源码"是一个专为此问题设计的解决方案,它提供了一种途径来恢复已删除的文件。Discover源码是一个开放源码的项目,允许开发者深入理解其内部工作原理,并可能根据需要进行定制或改进。 首先,...
"Discover桌面版安装软件"是针对Windows操作系统设计的应用程序,主要目标是提供在Windows 7和Windows 10(32位和64位)环境下使用的功能。Discover是一款多功能的软件,可能涵盖了数据探索、数据分析、文件管理或...
《基于Dcat-admin开发的进销存系统:Discover详解》 在信息技术日益发达的今天,PHP作为一门广泛使用的服务器端脚本语言,以其简洁、高效的特点,在Web开发领域占据着重要地位。配合MySQL数据库,可以构建出强大的...
Discover 操作手册 本手册详细介绍了 Discover 的操作方法,涵盖了从安装到数据分析的各个步骤,帮助用户快速掌握 Discover 的使用。 一、安装 Discover Discover 的安装过程相对简单,首先需要下载 Discover ...
gsoap 实现 ONVIF Discover 教程 gsoap 是一个基于 C 语言的开源 SOAP 开发工具包,可以用来实现 ONVIF(Open Network Video Interface Forum)discover 功能。ONVIF 是一个开放的工业标准,旨在确保视频监控产品...
"DISCOVER" 是一个专门设计用于研究和实验分布式视频编码框架的项目。在这个框架中,编码和解码过程被分解为多个独立的任务,这些任务可以在不同的计算节点上并行处理,从而优化整体系统性能。 分布式视频编码的...
在本文中,我们将深入探讨如何在基于STM32F4 Discovery板的USB Host模式下读取优盘(USB闪存驱动器)。STM32F4系列是STMicroelectronics推出的一款高性能、低功耗的微控制器,广泛应用于各种嵌入式系统,其中F4 ...
利用 McAfee DLP Discover,贵企业可以轻松防范数据丢失。与要求您确切知道要保护哪些内容的传统解决方案不同,McAfee DLP Discover全面覆盖了明确要保护的信息,并可帮助您找到非明确要保护的信息。要识别信息和...
"discover-source-path"是一个专门用于查找当前执行函数源文件路径的开源库,它简化了开发者获取代码来源的复杂过程。这个库尤其适用于调试、日志记录、性能分析等场景,可以帮助开发者更有效地定位问题和优化代码。...
《Discover使用手册》 Discover是Transwarp Data Hub Version 6.0中的一个核心组件,主要功能在于提供数据探索、分析和可视化的平台。对于数据分析人员和数据科学家来说,Discover是一个强大的工具,它能帮助用户...
Discover 进销存系统是基于Dcat-admin框架构建的一款企业级应用,专为管理企业的进货、销售和库存而设计。Dcat-admin是一个基于Laravel框架的后台管理界面快速开发工具,它提供了丰富的预设组件和易用的配置选项,...
在本压缩包“Laravel开发-laravel-discover .zip”中,我们主要关注的是Laravel框架的开发知识。Laravel是PHP世界里一个极其受欢迎的开源Web应用框架,以其优雅的语法、强大的功能和丰富的生态系统著称。让我们深入...
《Oracle Discoverer基本操作手册》知识点详析 Oracle Discoverer是一款在Oracle BI家族中备受推崇的产品,曾荣获JDJ读者选择奖,专为业务用户提供快速访问关系型数据库、数据中心或在线事务处理系统数据的能力。...
本篇文章将深入探讨如何利用unittest的discover()方法来执行Selenium编写的测试脚本。 首先,我们需要理解Selenium的基本概念。Selenium是一款强大的网页自动化测试工具,它能够模拟用户对网页的交互操作,如点击...
省钱快报分类列表 项目只适合分享,学习,交流,切勿作为商用!!! 目录结构 开发环境 更新日志 应用截图 下载地址 项目中使用到的三方库说明 项目反馈 Issuse Me 一.开发环境 ...二....三....四....五....
STM32F407VGT6_Discover-MO
行为风格理论,DISC内核,DISC的挑战和优势,DISC典型特质与相处原则,防止优势成为劣势,解读DISC性格分析报告 ...把DISC用活,调整自己的性格特质,平衡工作与家庭,《DISCover自我探索》读书笔记ppt模板。
DHCP Discover:客户端在初始状态下没有 IP 地址,因此向网络中广播 DHCP Discover 报文,请求可以分配 IP 地址的 DHCP 服务器响应。 在这个过程中,客户端使用 0.0.0.0 作为源 IP 地址,使用 255.255.255.255 或...