在GWT Web /生产模式中,Java代码被编译到在浏览器中呈现的Javascript代码中。
另外,我一直认为在GWT开发模式中,GWT开发人员插件将我的Java代码编译成JavaScript以在浏览器中呈现它。但在阅读某些网站后,我发现在开发模式下浏览器中没有编译JavaScript代码。
所以,我想知道:如果这些小部件不是JavaScript代码,我在浏览器中看到的这些小部件是什么?我不明白。
请帮助理解这一点。
答案 0 :(得分:6)
开发模式的关键在于你的代码是用Java运行的。如果您可以使用标准Java调试器,那么这是先决条件。您可以在GWT documentation找到高级概述。
魔术发生在JSNI methods和overlay types:当一个类被加载时,它的所有JSNI方法都被提取出来并且它们的JS体被发送到浏览器,准备执行(然后是JavaScript) ,并且该类被重新编写动态以重新实现JSNI方法以调用浏览器(通过你在那里安装的Dev插件并由{{1}触发在URL中)执行相应的JS函数。这就是为什么Java对象在JSNI方法中被视为不透明句柄的原因;它们被分配了一个数字ID,用于将Java对象与服务器端的虚拟JS对象配对。对覆盖类型进行了类似但更复杂的重写,并且在将JS对象传递给Java代码(作为覆盖类型)时使用相同的ID映射。
BTW,Super Dev Mode即时编译(几乎) 。