GWT有3部分组成。第一部分是编译部分,它负责将java程序转换成js程序。第2部分是调试部分,该部分可以在不编译的情况下调试GWT应用程序。这2个部分都是纯java的。最后还有一部分是运行框架,它是以js的形式存在的,可以直接在浏览器中运行。它负责应用程序可执行代码的载入和运行。这部分代码主要包含在gwt.js文件中。
GWT的工程中有一个HTML文件,和一个Java文件。java 文件被GWT编译成js文件。这个HTML文件就是GWT应用程序的入口。当浏览器载入它的时候,gwt运行框架也开始了运行。它首先检查HTML文件中模块加载表中的模块,为每一个模块创建一个模块控制块(MCB)。一个MCB中包含了该模块的名字,路径,窗口,插入点,和一个加载完成的标志。所有的MCB都被保存在一个MCB管理池中。
MCB管理池接下来根据MCB中的模块名字和路径信息,为每个模块创建一个iframe。随后iframe开始分别加载各自的模块。模块在加载过程中会根据浏览器的实际种类,选择不同的编译版本。加载一旦成功,MCB中的加载完成标志将会被设置成true。MCB管理池会用一个定时器不断检查所有的MCB,一旦发现所有的模块都已被加载,便会逐一启动这些模块来运行。
GWT的运行框架对用户来说是透明的,用户只看到自己编写的程序的运行情况,但是并不知道它是如何被加载,和启动的。这也是GWT的一个优点。
GWT的工程中有一个HTML文件,和一个Java文件。java 文件被GWT编译成js文件。这个HTML文件就是GWT应用程序的入口。当浏览器载入它的时候,gwt运行框架也开始了运行。它首先检查HTML文件中模块加载表中的模块,为每一个模块创建一个模块控制块(MCB)。一个MCB中包含了该模块的名字,路径,窗口,插入点,和一个加载完成的标志。所有的MCB都被保存在一个MCB管理池中。
MCB管理池接下来根据MCB中的模块名字和路径信息,为每个模块创建一个iframe。随后iframe开始分别加载各自的模块。模块在加载过程中会根据浏览器的实际种类,选择不同的编译版本。加载一旦成功,MCB中的加载完成标志将会被设置成true。MCB管理池会用一个定时器不断检查所有的MCB,一旦发现所有的模块都已被加载,便会逐一启动这些模块来运行。
GWT的运行框架对用户来说是透明的,用户只看到自己编写的程序的运行情况,但是并不知道它是如何被加载,和启动的。这也是GWT的一个优点。