GWT RPC“未找到 404”错误。如何让 RPC 在您自己的 Apache 服务器上工作?
Posted
技术标签:
【中文标题】GWT RPC“未找到 404”错误。如何让 RPC 在您自己的 Apache 服务器上工作?【英文标题】:GWT RPC "404 not found" error. How do you get RPC to work on your own Apache server? 【发布时间】:2011-07-25 21:08:41 【问题描述】:我实现的 RPC 在开发模式下运行良好。但是,一旦我将代码复制到真正的 apache 服务器中,RPC 就会停止工作! 如何配置 GWT 应用程序以使 RPC 可以在 apache 服务器上运行? 我找到了有关 RPC 的 GWT 教程,但它不是很有帮助。 非常感谢其他有关 RPC 配置的链接!
我开发了一些 GWT 代码。我实现并开始了 RPC 客户端-服务器通信。当我说它工作时......我的意思是它在开发模式下工作得很好。我可以点击它并按预期与服务器交互。
然后,当我执行 GWT 编译并将 war 目录复制到我的 apache 服务器 htdocs 文件夹中时。我可以查看该网站,但是当我单击应该启动 RPC 的按钮时,什么也没有发生。我检查了 Firefox-->tools-->web 控制台并看到“NAMEOFRPC 404 not found”。
这是我的 WEB-INF web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<!-- Servlets -->
<servlet>
<servlet-name>NameOfRpc</servlet-name>
<servlet-class>com.company.nameOfModule.server.rpc.NameOfRpcImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>NameOfRpc</servlet-name>
<url-pattern>/nameOfModule</url-pattern>
</servlet-mapping>
<!-- Default page to serve -->
<welcome-file-list>
<welcome-file>NameOfModule.html</welcome-file>
</welcome-file-list>
</web-app>
这是我得到的 Firefox 网络控制台错误:
[16:50:58.792] POST http://SERVER/gwt/nameOfModule/nameOfModule/NameOfRpc [HTTP/1.1 404 Not Found 3065ms]
我将 war 文件夹复制到 /SERVER/gwt,然后将其重命名为 nameOfModule。
我的 WEB-INF/web.xml 有什么问题吗?
【问题讨论】:
com.company.nameOfModule.server.rpc.NameOfRpc 接口上的@RemoteServiceRelativePath 中有什么内容? Java 代码 NameOfRpc.java 为:@RemoteServiceRelativePath("RpcGetXml")。 当我更改@RemoteServiceRelativePath 时,我得到一个新的“404 not found”,它与我在@RemoteServiceRelativePath 字段中输入的内容相对应。例如:将其更改为“测试”。然后我得到了一个新的 404 not found SERVER/gwt/nameOfModule/nameOfModule/TESTING . 你有运行tomcat吗?任何 JVM 实际托管 webapp? 服务器端端点必须是能够托管常规 J2EE servlet 的 JVM Contianer。 【参考方案1】:您需要一些正在运行的 JVM 实例,运行一个 J2EE servlet 容器,该容器托管您的 servlet 代码。据我了解,Apache 只是一个 http 服务器,不运行 java 代码或主机 servlet,开箱即用。我假设您的 wiki 只是 apache 提供的一组 HTML 页面。
Tomcat 只是一个选项。它是人们用来托管 java servlet 的标准 JVM 容器。它还能够提供 HTML 文件,因此如果您使用 tomcat,则可以停止使用 apache http 服务器。
您的应用在开发模式下运行良好,因为 GWT 托管模式具有内置的 Jetty 服务器,这是一个与 tomcat 相当的轻量级 servlet 容器。像 tomcat、jetty 和 jboss 这样的服务器实际上会读取您的 web.xml 并执行您在其中描述的操作。
【讨论】:
我有tomcat。在我的开发机器上配置并运行服务器。然后我将 GWT war 文件夹复制到 tomcat webapss 文件夹中。然后我能够成功运行我的 GWT 应用程序,它的工作方式与开发模式完全一样。 如果我要总结您的冗长答案,它基本上会说:您的 apache 服务器无法运行 servlet,这就是您的 GWT 应用程序无法运行的原因。您需要将 GWT 应用程序加载到可以运行 servlet 的服务器上。一个可以运行 servlet 的示例服务器是 Tomcat。 *** 是学习如何在技术上编写 IMO 以及如何有说服力地编写的好方法。两者都是非常重要的技能。 (*** 的创建者之一也有同样的想法:codinghorror.com/blog/2011/02/how-to-write-without-writing.html) 你是在 windows/linux/mac 上开发吗?你用tomcat吗?【参考方案2】:您将需要在 web.xml 中包含以下内容:
<url-pattern>/nameOfModule/RpcGetXml</url-pattern>
或者你的 RemoteServiceRelativePath 中的任何内容
【讨论】:
以上是关于GWT RPC“未找到 404”错误。如何让 RPC 在您自己的 Apache 服务器上工作?的主要内容,如果未能解决你的问题,请参考以下文章
如何在客户端到达 OnFailure() 之前处理 RPC 失败错误?在 GWT
如何修复多项目 GWT 设置中的 RPC 错误 IncompatibleRemoteServiceException?