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.
相关推荐
运行时,选择“Run as” -> “GWT Hosted Mode”或“Debug as” -> “GWT Debug Mode”。Hosted Mode会在内置的浏览器中启动应用,便于快速迭代开发。Debug Mode则允许进行源代码级别的调试。 三、调试GWT应用 GWT...
宿主模式是GWT的一个重要特性,它允许开发者在本地环境中直接运行和测试GWT应用,无需部署到Web服务器。在宿主模式下,开发者可以实时查看和调试代码,就像在开发传统的Java应用一样,极大地提高了开发和调试的效率...
GWT允许开发者使用Java语言编写客户端代码,然后通过编译器将其转换为优化过的JavaScript,以便在各种浏览器上运行。这个“gwt 练习 gwt学习”项目可能是为了帮助用户熟悉GWT的基本概念、开发流程和最佳实践。 在...
通过阅读博文(链接已给出,但在这里无法直接访问),你可能会了解到如何解析和理解GWT的内部工作原理,以及如何利用GWT的相关工具提升开发效率。例如,可能是关于性能优化、调试工具的使用,或者是GWT与其他工具...
在这个模式下,开发者可以在 Java 虚拟机中使用 GWT 内置的浏览器模拟器运行未转换的 Java 代码,实现快速的“编码、测试、调试”循环。启动宿主模式可以通过运行 `com.google.gwt.dev.GWTShell` 命令实现。 【Web ...
无论是对于初学者还是有经验的开发者来说,掌握GWT的基本原理和开发流程都是非常有价值的。随着技术的不断进步,虽然GWT可能不再是当前最流行的前端开发框架之一,但它仍然在某些特定场景下发挥着重要作用。
- **Hosted Model**:在开发过程中,GWT 提供了 Hosted Mode,它模拟一个浏览器环境,让开发者可以直接在 Java 虚拟机上运行和调试 Java 代码,无需每次都编译成 JavaScript。这种方式提高了开发效率,便于调试。 ...
GWT 1.5.2发布于2008年,虽然现在已经比较过时,但对于初学者来说,它仍然是一个理解GWT基本概念和工作原理的好起点。 GWT的核心理念是通过Java编写客户端代码,然后自动编译为高效的JavaScript,使得开发者可以...
GWT通过编译器将Java代码转换为高效的JavaScript,从而在客户端浏览器上运行。这个“GWT入门 GWT中文教程”压缩包包含了一系列资源,旨在帮助初学者快速理解和掌握GWT的开发技术。 首先,EXT-GWT2.0.1是EXT-GWT...
1. **Hosted模式**:在此模式下,GWT应用像普通的Java应用一样运行,支持标准的Java调试。为了支持Hosted模式,GWT提供了一个私有的Web浏览器,该浏览器通过与JVM的交互来模拟真实浏览器的行为。 2. **Web模式**:在...
6. **测试与调试**:完成代码编写后,使用GWT的开发模式进行测试,这可以在本地浏览器中运行,便于调试和查看错误信息。同时,部署到服务器后,还要进行生产环境的测试,确保所有功能正常。 在"TestDB"这个文件名中...
3. **宿主模式(Hosted Mode)**:宿主模式是GWT的一个强大功能,它允许开发者在开发环境中直接运行和调试Java代码,就像在本地运行Java应用一样,极大地提高了开发效率。 4. **模块化和重用**:GWT支持模块化开发,...
在高级教程中,你将接触到GWT的高级特性,如GWT编译器的工作原理,如何优化代码以提高性能,以及如何调试GWT应用。这一部分还将深入讨论GWT的客户端数据管理,包括使用 Gin 和 Guice 进行依赖注入,以及使用GWT的 ...
10. **开发模式与生产模式**: GWT提供两种运行模式:开发模式(Development Mode)下,开发者可以直接在浏览器中调试Java代码;生产模式(Production Mode)下,编译后的JavaScript代码会进行优化,以提高性能。 11...
这通常通过GWT的开发模式(Development Mode)完成,它会运行一个内置的HTTP服务器,提供即时反馈和热加载功能。 8. **项目启动与访问**:最后,启动Web应用,通常是通过运行应用的主入口点。注意,访问应用时应使用...
此外,MVP(Model-View-Presenter)模式是GWT中推荐的架构模式,它分离了用户界面、视图逻辑和业务逻辑。 **5. RPC通信** GWT提供了Remote Procedure Call (RPC)机制,使得客户端和服务器之间可以进行安全的数据...
1. **Java-to-JavaScript 编译器**:GWT的核心特性之一是它的编译器,它将Java源代码转换为可以在所有主流浏览器上运行的优化JavaScript代码。这使得开发者能够使用熟悉的Java语法和工具链进行开发,同时也确保了...