调试和运行GWT / GAE应用程序的客户端/服务器代码

时间:2012-09-08 11:58:33

标签: java eclipse google-app-engine gwt google-eclipse-plugin

我正在开发一个将部署到GAE的GWT应用程序。我已经安装了Google-Eclipse插件,它也下载了GWT和GAE SDK。但是现在我坐下来实际考虑事情,我对如何在我的机器上本地调试和运行应用程序感到非常困惑。

通常,当我有一个Java Web应用程序(我部署到Tomcat;我只是熟悉它)时,我的选项如下:

  • 为我的应用程序创建一个远程调试配置,将WAR部署到我的本地Tomcat容器,但是我可以从Eclipse内部调试它(设置断点,逐步执行服务器端代码)
  • 只需将其部署到Tomcat容器,在http://localhost:8080/MyApp启动浏览器并开始在本地使用/手动测试应用程序

我想要完成相同的工作,但是对于GWT和GAE,两者都有很多选择,当你在同一台机器上将它们配对时,它们会变得更加令人困惑(对于像我这样的新手):

最终,我希望能够做到以下几点:

  • 调试服务器应用程序,包括设置断点,单步执行代码等,直接从Eclipse内部
  • 在我的计算机本地调试客户端应用程序,包括设置断点,单步调试代码等,如Firebug或Chrome开发者工具之类的浏览器插件
  • 直接从Eclipse内部调试应用程序(客户端和服务器端代码串联),包括设置断点,单步执行代码等。
  • 与上面相同(调试整个应用程序,客户端和服务器端),从Eclipse内部开始,但服务器在不同的(远程)计算机上运行。这样我可以调试我的应用程序,因为它在我的QA机器/环境上运行,就在我的开发机器上的Eclipse实例内部
  • 在本地运行应用程序并模拟生产;也就是说,将后端部署到我的GAE app dev服务器,然后打开浏览器并转到正确的URL以访问我的应用程序,因为它由本地GAE开发应用程序服务器提供

我认为我的困惑的根源在于GWT和GAE SDK都在所谓的“开发模式”中运行,并且因为它们针对不同的层(客户端和服务器),所以难以绕过什么设置/ configs必须能够在需要时隔离它们,或者在需要时串联测试它们。提前感谢您的帮助!

2 个答案:

答案 0 :(得分:6)

我会尽力回答你的问题。我最近继承了GWT的代码库,并使用了app引擎,所以我会尽我所能。

首先,您的服务器端代码由Jetty Servlet容器中的GWT SDK运行。您的客户端代码编译为javascript,并在浏览器中运行。因此,您可以非常轻松地针对任何servlet服务器后端运行客户端代码。因此,当您在'dev模式'中运行GAE时,您已编译了Java,并且正在GAE dev servlet容器中运行带有GWT入口点的servlet。

设置本地环境非常简单。在eclipse中,您可以右键单击您的项目并执行“Run As”或“Debug As”。在“运行配置”和“调试配置”选项中,您将在标题为“Web应用程序”的列表中看到Google图标。您应该创建一个配置文件来记住选项。

此配置为您提供了一些选项。如果您有相应的GAE文件,则可以转到“App Engine”选项卡并为其配置选项。在“服务器”标签下,您有两种选择。如果选中“运行内置服务器”选项。 GWT将在其Jetty容器中运行您的servlet,并运行GWT客户端代码服务器。如果没有,它将只运行客户端代码服务器,允许您动态更改客户端代码,并在eclipse中调试客户端代码。 Eclipse将为您提供一个漂亮的URL,如下所示。

http://127.0.0.1:8888/index.jsp?gwt.codesvr=127.0.0.1:9997

这实际上是两个部分,天气你使用内置的码头servlet容器,它看起来是一样的。

第一部分是http://127.0.0.1:8888/index.jsp - 这是您正在运行的servlet容器,它可以在tomcat,web-logic或GWT dev服务器或任何servlet容器上运行。

第二部分是?gwt.codesvr=127.0.0.1:9997 - 这是一些GWT魔术,当与浏览器GWT开发插件结合使用时,将允许您在运行时更改客户端代码,并在eclipse中将您的javascript调试为java。

如果我只进行客户端代码更改,我有时会用我们的dev服务器url替换http://127.0.0.1:8888/index.jsphttp://mydevserver:1234/myapp/index.jsp?gwt.codesvr=127.0.0.1:9997这允许我在本地运行客户端代码服务器而不运行服务器端本地代码。请注意,我可以通过直接访问dev servlet而不使用gwt.codesvr参数来访问部署到dev的客户端代码。

我希望这会有所帮助。如果您有疑问,我可能会详细说明其中的部分内容。

答案 1 :(得分:0)

这个Google Eclipse Plugin会让你跑步。它基本上是Eclipse的一个插件,可以帮助您创建GWT + GAE应用程序(只需点击几下和类型),然后就可以直接从Eclipse运行您的应用程序。