【问题标题】:GWT app does not work properly when deployed to Tomcat server部署到 Tomcat 服务器时,GWT 应用程序无法正常工作
【发布时间】:2012-08-24 05:22:36
【问题描述】:

我有一个小型网络应用程序,在 Eclipse 中部署到 App Engine 时可以正常工作。 但是,当我想将我的应用程序部署到我的 Tomcat 服务器时出现错误。

我将war文件夹的内容直接复制到Tomcat的默认ROOT文件夹中。 然后我在 Eclipse 内部的外部服务器上运行我的应用程序。

到目前为止一切正常 - 应用程序直接从浏览器的缓存中加载。

问题来了:

当我点击我的应用程序的一些通过 GWT 端的 JSNI 实现的功能时,谷歌浏览器开发控制台显示 “Uncaught ReferenceError: function is not defined”。 我知道错误来自外部 JS 代码中的 JS 调用者。调用者调用一个 GWT 客户端方法/函数(这就是为什么它没有在 ext.JS 代码中定义)。

关于如何解决这个问题有什么建议吗?

【问题讨论】:

  • 你试过在私人导航中运行谷歌浏览器吗?当我遇到同样的问题时,它对我有很大帮助,因为这种模式不缓存页面(也不缓存脚本、图像……)
  • 我试过了,但没有解决我的问题。无论如何谢谢 - 我会记住这一点。

标签: gwt


【解决方案1】:

您是否有任何需要外部 js 文件的额外模块?某些模块要求将 js 文件包含在 war 中并包含在您的根 .html 文件中。可能是您使用的库没有基本的 js 函数。

您可以将其添加到您的 .gwt.xml 文件中以打开堆栈跟踪。

<set-property name="compiler.stackMode" value="emulated"/>
<set-configuration-property name="compiler.emulatedStack.recordLineNumbers" value="true"/> 
<set-configuration-property name="compiler.emulatedStack.recordFileNames" value="true"/> 

您还可以尝试使用 setUncaughtException 处理程序来查看在生产模式下引发的异常。打开模拟堆栈跟踪后,您应该能够获得包含代码行号的回溯。它不如开发模式,但对调试很有用。

GWT.setUncaughtExceptionHandler(new GWT.UncaughtExceptionHandler()) {
    @Override
    public void onUncaughtException(Throwable cause) {
        logger.log(Level.SEVERE, "OOPS", cause);
    }
}

注意确保您的记录器配置为使用您可以访问的内容。像 firebug 或远程日志记录 servlet。

我目前使用 eclipse 在生产和开发模式下使用 tomcat 7。您可以在 Eclipse 中配置服务器的 tomcat 实例并使用“在外部服务器上作为 WebApplication 运行”。这将允许您在开发模式下查看异常。

如果您处于生产模式,请确保您没有 ?gwt.codesvr=127.0.0.1:9997。除非您运行开发代码服务器,否则这也会导致问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-18
    • 1970-01-01
    • 2021-05-25
    相关资源
    最近更新 更多