1

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

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

到那时一切正常——应用程序直接从浏览器的缓存中加载。

问题来了:

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

关于如何解决这个问题的任何建议?

4

1 回答 1

3

您是否有任何需要外部 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);
    }
}

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

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

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

于 2012-08-23T21:15:57.743 回答