`
feirou520
  • 浏览: 119550 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

Discover GWT's host mode

    博客分类:
  • GWT
阅读更多

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文件恢复源码解析与应用探讨》 Discover是一款专门用于文件恢复的工具,其开源的特性使得开发者和爱好者能够深入研究其内部机制,从而更好地理解文件系统的运作原理,以及如何在数据丢失的情况下进行有效...

    Laravel开发-laravel-discover

    **Laravel 开发详解:Laravel-discover 模块化后端系统** Laravel 是一个基于 PHP 的优雅、强大且富有表现力的框架,被广泛应用于构建高效、可扩展的 Web 应用程序。在“Laravel-discover”项目中,开发者已经构建...

    误删文件恢复discover源码

    "误删文件恢复discover源码"是一个专为此问题设计的解决方案,它提供了一种途径来恢复已删除的文件。Discover源码是一个开放源码的项目,允许开发者深入理解其内部工作原理,并可能根据需要进行定制或改进。 首先,...

    Discover桌面版安装软件

    "Discover桌面版安装软件"是针对Windows操作系统设计的应用程序,主要目标是提供在Windows 7和Windows 10(32位和64位)环境下使用的功能。Discover是一款多功能的软件,可能涵盖了数据探索、数据分析、文件管理或...

    Discover 是一个基于 Dcat-admin 开发的进销存系统.zip

    《基于Dcat-admin开发的进销存系统:Discover详解》 在信息技术日益发达的今天,PHP作为一门广泛使用的服务器端脚本语言,以其简洁、高效的特点,在Web开发领域占据着重要地位。配合MySQL数据库,可以构建出强大的...

    discover操作手册

    Discover 操作手册 本手册详细介绍了 Discover 的操作方法,涵盖了从安装到数据分析的各个步骤,帮助用户快速掌握 Discover 的使用。 一、安装 Discover Discover 的安装过程相对简单,首先需要下载 Discover ...

    gsoap实现onvif discover教程

    gsoap 实现 ONVIF Discover 教程 gsoap 是一个基于 C 语言的开源 SOAP 开发工具包,可以用来实现 ONVIF(Open Network Video Interface Forum)discover 功能。ONVIF 是一个开放的工业标准,旨在确保视频监控产品...

    DISCOVER-分布式视频编码框架

    "DISCOVER" 是一个专门设计用于研究和实验分布式视频编码框架的项目。在这个框架中,编码和解码过程被分解为多个独立的任务,这些任务可以在不同的计算节点上并行处理,从而优化整体系统性能。 分布式视频编码的...

    usb host读取优盘

    在本文中,我们将深入探讨如何在基于STM32F4 Discovery板的USB Host模式下读取优盘(USB闪存驱动器)。STM32F4系列是STMicroelectronics推出的一款高性能、低功耗的微控制器,广泛应用于各种嵌入式系统,其中F4 ...

    McAfee DLP Discover 识别和保护敏感数据

    利用 McAfee DLP Discover,贵企业可以轻松防范数据丢失。与要求您确切知道要保护哪些内容的传统解决方案不同,McAfee DLP Discover全面覆盖了明确要保护的信息,并可帮助您找到非明确要保护的信息。要识别信息和...

    前端开源库-discover-source-path

    "discover-source-path"是一个专门用于查找当前执行函数源文件路径的开源库,它简化了开发者获取代码来源的复杂过程。这个库尤其适用于调试、日志记录、性能分析等场景,可以帮助开发者更有效地定位问题和优化代码。...

    discover详细使用手册

    《Discover使用手册》 Discover是Transwarp Data Hub Version 6.0中的一个核心组件,主要功能在于提供数据探索、分析和可视化的平台。对于数据分析人员和数据科学家来说,Discover是一个强大的工具,它能帮助用户...

    Discover 是一个基于 Dcat-admin 开发的进销存系统

    Discover 进销存系统是基于Dcat-admin框架构建的一款企业级应用,专为管理企业的进货、销售和库存而设计。Dcat-admin是一个基于Laravel框架的后台管理界面快速开发工具,它提供了丰富的预设组件和易用的配置选项,...

    Laravel开发-laravel-discover .zip

    在本压缩包“Laravel开发-laravel-discover .zip”中,我们主要关注的是Laravel框架的开发知识。Laravel是PHP世界里一个极其受欢迎的开源Web应用框架,以其优雅的语法、强大的功能和丰富的生态系统著称。让我们深入...

    Oracle discover基本操作手册

    《Oracle Discoverer基本操作手册》知识点详析 Oracle Discoverer是一款在Oracle BI家族中备受推崇的产品,曾荣获JDJ读者选择奖,专为业务用户提供快速访问关系型数据库、数据中心或在线事务处理系统数据的能力。...

    Python+Selenium框架设计篇之10-unittest执行脚本方法之discover()方法

    本篇文章将深入探讨如何利用unittest的discover()方法来执行Selenium编写的测试脚本。 首先,我们需要理解Selenium的基本概念。Selenium是一款强大的网页自动化测试工具,它能够模拟用户对网页的交互操作,如点击...

    Android代码-Discover

    省钱快报分类列表 项目只适合分享,学习,交流,切勿作为商用!!! 目录结构 开发环境 更新日志 应用截图 下载地址 项目中使用到的三方库说明 项目反馈 Issuse Me 一.开发环境 ...二....三....四....五....

    STM32F407VGT6_Discover-MO

    STM32F407VGT6_Discover-MO

    《DISCover自我探索》读书笔记ppt模板.rar

    行为风格理论,DISC内核,DISC的挑战和优势,DISC典型特质与相处原则,防止优势成为劣势,解读DISC性格分析报告 ...把DISC用活,调整自己的性格特质,平衡工作与家庭,《DISCover自我探索》读书笔记ppt模板。

    dhcp-discover.py

    DHCP Discover:客户端在初始状态下没有 IP 地址,因此向网络中广播 DHCP Discover 报文,请求可以分配 IP 地址的 DHCP 服务器响应。 在这个过程中,客户端使用 0.0.0.0 作为源 IP 地址,使用 255.255.255.255 或...

Global site tag (gtag.js) - Google Analytics