GWT:运行一个已完成的项目


[img_assist|nid=3421|title=|desc=|link=url|url=http://www.manning.com/affiliate/idevaffiliate.php?id|align=left|width=208|height=388]Let‘s将GWTShell和GWTCompiler与计算器示例CalculatorWidget结合使用。首先,我们将使用GWTShell了解情况并启动托管模式浏览器。这通常是您在开发期间以托管模式运行和调试项目的方式。然后,我们将继续使用GWTCompiler进行编译,GWTCompiler通常用作构建过程的一部分,将Java转换为JavaScript并为Web模式创建可部署的构件。

托管模式和GWT shell

当您运行ApplicationCreator时,GWT会创建一些快捷脚本,用于在项目中调用GWTShell和GWTCompiler。对于本例,我们将首先使用[PROJECT_HOME]/Calculator-shell脚本(它将具有依赖于平台的扩展)来执行GWTShell。下一步是确保环境按照支持GWT和项目本身所需的方式进行配置,然后调用Calculator-shell。它应该会成功调用shell中的示例,如图1所示。

[img_assist|nid=4427|title=|desc=|link=none|align=none|width=360|height=274]

图1运行CalculatorWidget的GWT shell和托管模式浏览器

图1中的背景窗口是GWT shell,前台是运行CalculatorWidget的托管模式浏览器。GWT shell包括一个日志控制台,其中将显示任何问题。这包括在调用堆栈中向上传递的异常。外壳还包括用于操作日志和启动托管模式浏览器的按钮。

是否可以指定GWT外壳浏览器?

当您启动GWT shell时,您会注意到托管模式浏览器是您正在使用的平台的系统浏览器。这意味着Windows上的Internet Explorer、Mac上的Safari和Linux上的Mozilla Firefox。托管模式浏览器实际上是基于SWT浏览器组件的,因此当前无法指定或配置在运行shell时使用哪个浏览器。(这在不久的将来会随着进程外托管模式的出现而改变,该模式将允许您在平台上使用任何受支持的浏览器。)

回想一下,当在Web模式下执行时,shell和托管模式浏览器将您的项目作为Java字节码执行,而不是JavaScript(稍后我们将介绍)。这意味着在托管模式下,除了能够使用Refresh按钮快速重新编译代码之外,您还可以使用Java调试器和分析器,就像您通常对任何Java项目所做的那样。

要连接到GWT shell以进行调试,您可以使用Java平台调试器体系结构(JPDA)(它内置于大多数JVM实现中)和您最喜欢的IDE。通过使用以下命令行选项调用com.google.gwt.dev.GWTShell,您可以强制GWT shell延迟启动,直到调试器连接:

-Xdebug -Xnoagent -Djava.compiler=NONE
-Xrunjdwp:transport=dt_socket,server=y,address=8888,suspend=y

使用此技术,您可以在IDE外部运行shell,然后使用Eclipse或NetBeans等连接到它,地址为localhost:8888。一旦建立了此连接,套接字侦听器将从shell重置为HTTP侦听器,您可以像往常一样继续分步调试。

在托管模式浏览器中,您将注意到标准浏览器导航按钮和一个调用项目的GWT编译器的特殊编译/浏览按钮。这将使您脱离托管模式(Java),进入Web模式(JavaScript)。

Web模式和GWT编译器

GWTCompiler是GWT工具,它将Java源代码路径代码编译成JavaScript,并以可部署的项目形式将其与公共路径资源捆绑在一起。GWT shell中提供的Compile/Browse按钮将编译您的项目,将其部署到本地主机上Apache Tomcat的精简开发版本中(实际上,GWT shell还将此mini Tomcat用于任何涉及的服务servlet),并在机器的默认配置浏览器中启动项目。如图2中的屏幕截图所示,可以指定用于Web模式的浏览器(可以配置机器默认设置),因此它可以不同于托管模式必须在shell内使用的系统浏览器。

[img_assist|nid=4428|title=|desc=|link=none|align=none|width=264|height=184]

图2单击GWT shell中的编译/浏览按钮后,在Mac上使用Firefox在Web模式下运行的CalculatorWidget

通过编译步骤,您将从托管模式切换到Web模式-以JavaScript而不是直接以Java运行您的代码。除了shell中的编译/浏览按钮外,由ApplicationCreator创建的快捷方式ProjectName-Compile脚本也可用于编译您的项目(默认情况下会将其放在[PROJECT_HOME]/www位置)。当然,您也可以手动使用GWT编译器,或者与IDE插件一起使用,或者通过使用构建工具(如Ant或Maven)来使用。

本文节选自罗伯特·库珀(Robert Cooper)和查理·柯林斯(Charlie Collins)合著的“实践中的GWT”(GWT In Practice)第一章,并于2008年5月由Manning Publications出版。