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

IAm*_*aja 3 java eclipse gwt google-app-engine 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 dev appserver提供

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

agl*_*man 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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