`

GWT Hosted模式运行原理

    博客分类:
  • gwt
阅读更多

hosted模式运行原理,对源码的理解应该是这样的

GWT Hosted运行原理

 

 

以下内容转自:

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) /*-{
    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.
分享到:
评论
1 楼 feirou520 2008-11-28  
如果能在详细一点点就好了0。0 呵呵 谢拉

相关推荐

    《GWT揭秘》试读:运行调试项目

    运行时,选择“Run as” -> “GWT Hosted Mode”或“Debug as” -> “GWT Debug Mode”。Hosted Mode会在内置的浏览器中启动应用,便于快速迭代开发。Debug Mode则允许进行源代码级别的调试。 三、调试GWT应用 GWT...

    GWT学习经验及实例指导

    宿主模式是GWT的一个重要特性,它允许开发者在本地环境中直接运行和测试GWT应用,无需部署到Web服务器。在宿主模式下,开发者可以实时查看和调试代码,就像在开发传统的Java应用一样,极大地提高了开发和调试的效率...

    gwt 练习 gwt学习

    GWT允许开发者使用Java语言编写客户端代码,然后通过编译器将其转换为优化过的JavaScript,以便在各种浏览器上运行。这个“gwt 练习 gwt学习”项目可能是为了帮助用户熟悉GWT的基本概念、开发流程和最佳实践。 在...

    GWT

    通过阅读博文(链接已给出,但在这里无法直接访问),你可能会了解到如何解析和理解GWT的内部工作原理,以及如何利用GWT的相关工具提升开发效率。例如,可能是关于性能优化、调试工具的使用,或者是GWT与其他工具...

    关于GWT的部署介绍

    在这个模式下,开发者可以在 Java 虚拟机中使用 GWT 内置的浏览器模拟器运行未转换的 Java 代码,实现快速的“编码、测试、调试”循环。启动宿主模式可以通过运行 `com.google.gwt.dev.GWTShell` 命令实现。 【Web ...

    GWT快速开发(GWT) 是一个Java软件开发框架用于开发类似于Google Maps和Gmail的AJAX应用程序。GWT的设计参考Java AWT包设计,类命名规则、接口设计、事件监听等。你可以用Java编程语言开发你的界面,然后用GWT编译器将Java类转换成适合浏览器执行的...

    无论是对于初学者还是有经验的开发者来说,掌握GWT的基本原理和开发流程都是非常有价值的。随着技术的不断进步,虽然GWT可能不再是当前最流行的前端开发框架之一,但它仍然在某些特定场景下发挥着重要作用。

    gwt入门-gwt从这里开始

    - **Hosted Model**:在开发过程中,GWT 提供了 Hosted Mode,它模拟一个浏览器环境,让开发者可以直接在 Java 虚拟机上运行和调试 Java 代码,无需每次都编译成 JavaScript。这种方式提高了开发效率,便于调试。 ...

    gwt实例,基于gwt-windows-1.5.2

    GWT 1.5.2发布于2008年,虽然现在已经比较过时,但对于初学者来说,它仍然是一个理解GWT基本概念和工作原理的好起点。 GWT的核心理念是通过Java编写客户端代码,然后自动编译为高效的JavaScript,使得开发者可以...

    GWT入门 GWT中文教程

    GWT通过编译器将Java代码转换为高效的JavaScript,从而在客户端浏览器上运行。这个“GWT入门 GWT中文教程”压缩包包含了一系列资源,旨在帮助初学者快速理解和掌握GWT的开发技术。 首先,EXT-GWT2.0.1是EXT-GWT...

    use gwt dev Ajaxt--GWT 开发Ajax更方便(学习文档)

    1. **Hosted模式**:在此模式下,GWT应用像普通的Java应用一样运行,支持标准的Java调试。为了支持Hosted模式,GWT提供了一个私有的Web浏览器,该浏览器通过与JVM的交互来模拟真实浏览器的行为。 2. **Web模式**:在...

    Gwt连接数据库的案例

    6. **测试与调试**:完成代码编写后,使用GWT的开发模式进行测试,这可以在本地浏览器中运行,便于调试和查看错误信息。同时,部署到服务器后,还要进行生产环境的测试,确保所有功能正常。 在"TestDB"这个文件名中...

    GWT完整教程,Word版

    在高级教程中,你将接触到GWT的高级特性,如GWT编译器的工作原理,如何优化代码以提高性能,以及如何调试GWT应用。这一部分还将深入讨论GWT的客户端数据管理,包括使用 Gin 和 Guice 进行依赖注入,以及使用GWT的 ...

    Gwt开发文档

    10. **开发模式与生产模式**: GWT提供两种运行模式:开发模式(Development Mode)下,开发者可以直接在浏览器中调试Java代码;生产模式(Production Mode)下,编译后的JavaScript代码会进行优化,以提高性能。 11...

    GWT入门和进阶

    此外,MVP(Model-View-Presenter)模式是GWT中推荐的架构模式,它分离了用户界面、视图逻辑和业务逻辑。 **5. RPC通信** GWT提供了Remote Procedure Call (RPC)机制,使得客户端和服务器之间可以进行安全的数据...

    Gwt中文手册,GWt入门

    Gwt中文手册,GWt入门Gwt中文手册,GWt入门Gwt中文手册,GWt入门

    GWT Demo,GWT学习时的一些小例子

    1. **Java-to-JavaScript 编译器**:GWT的核心特性之一是它的编译器,它将Java源代码转换为可以在所有主流浏览器上运行的优化JavaScript代码。这使得开发者能够使用熟悉的Java语法和工具链进行开发,同时也确保了...

Global site tag (gtag.js) - Google Analytics