是否可以通过编程方式更改GWT RPC servlet路径?

是否可以通过编程方式更改GWT RPC servlet路径?,gwt,gilead,Gwt,Gilead,从运行时,我的GWT应用程序工作正常 我需要在本质上是一个代理的背后托管gwt应用程序。当位于代理之后时,url将更改为类似的内容 当我尝试在代理后面访问时,Gwt抛出了一个错误: myAppServlet:错误:模块路径 请求, /foo/bar/00_00_00/myapp/myapp/,不是 在与此相同的web应用程序中 servlet,/myapp。您的模块可能不可用 请正确配置或删除您的客户端 服务器代码可能已经过时了 当gwt尝试序列化java对象并将其发送回客户端时,该错误似乎发生

从运行时,我的GWT应用程序工作正常

我需要在本质上是一个代理的背后托管gwt应用程序。当位于代理之后时,url将更改为类似的内容

当我尝试在代理后面访问时,Gwt抛出了一个错误:

myAppServlet:错误:模块路径 请求, /foo/bar/00_00_00/myapp/myapp/,不是 在与此相同的web应用程序中 servlet,/myapp。您的模块可能不可用 请正确配置或删除您的客户端 服务器代码可能已经过时了

当gwt尝试序列化java对象并将其发送回客户端时,该错误似乎发生在rpc请求之后

有没有办法通知GWT该应用程序在代理之后

更新:

第一个请求似乎很有效。但是其他所有的请求都失败了??!! 我发现错误来自RemoteServiceServlet.loadSerializationPolicy。不幸的是,我无法覆盖,因为它是静态的


也许可以通过编程方式设置servlet上下文路径?

我不确定这是否能解决整个问题,因为您说,它在您第一次调用时就已经起作用了-但是,当您在客户端创建serviceAsync时,您可以尝试以下方法吗:

MyServiceAsync service = GWT.create(MyService.class);
ServiceDefTarget serviceDefTarget = (ServiceDefTarget) service;
serviceDefTarget.setServiceEntryPoint(
     "http://localhost:8080/foo/bar/00_00_00/myapp/MyApp/");
   /* ^^ Use your full servlet path here ^^ */
如果您想知道,为什么必须将此显式转换为
ServiceDefTarget
——下面是ServiceDefTarget的Javadoc中的一个解释:

/**
 * An interface implemented by client-side RPC proxy objects. Cast the object
 * returned from {@link com.google.gwt.core.client.GWT#create(Class)} on a
 * {@link RemoteService} to this interface to initialize the target URL for the
 * remote service.
 */
(我假设您是从“”加载html主机页,否则由于同源策略,此操作将失败。)


我可以想象的另一个问题可能与代理中的缓存有关-因此,可能先尝试关闭任何缓存,然后仅对具有
“*.cache.*.code>文件名(另请参见:)的资源重新启用它。

我不确定这是否能解决整个问题,因为您说,它已经在您第一次调用时起作用了-但是当您在客户端创建serviceAsync时,是否可以尝试以下操作:

MyServiceAsync service = GWT.create(MyService.class);
ServiceDefTarget serviceDefTarget = (ServiceDefTarget) service;
serviceDefTarget.setServiceEntryPoint(
     "http://localhost:8080/foo/bar/00_00_00/myapp/MyApp/");
   /* ^^ Use your full servlet path here ^^ */
如果您想知道,为什么必须将此显式转换为
ServiceDefTarget
——下面是ServiceDefTarget的Javadoc中的一个解释:

/**
 * An interface implemented by client-side RPC proxy objects. Cast the object
 * returned from {@link com.google.gwt.core.client.GWT#create(Class)} on a
 * {@link RemoteService} to this interface to initialize the target URL for the
 * remote service.
 */
(我假设您是从“”加载html主机页,否则由于同源策略,此操作将失败。)


我能想象到的另一个问题可能与代理中的缓存有关-因此,也许可以先尝试关闭任何缓存,然后仅对具有
“*.cache.*”的资源重新启用它。
文件名(另请参见:)。

谢谢,这为我指明了正确的方向。My web.xml正在为我的服务定义url映射为/myapp。但我最终意识到,您必须将servlet url映射到所有编译gwt js内容所在的同一url。因此,我将servlet的url映射更改为/MyApp/MyApp。我的GWT模块名为MyApp。因此,既然两条路径匹配,它就工作了!谢谢,这为我指明了正确的方向。My web.xml正在为我的服务定义url映射为/myapp。但我最终意识到,您必须将servlet url映射到所有编译gwt js内容所在的同一url。因此,我将servlet的url映射更改为/MyApp/MyApp。我的GWT模块名为MyApp。因此,既然两条路径匹配,它就工作了!