是否可以通过编程方式更改GWT RPC servlet路径?
从运行时,我的GWT应用程序工作正常 我需要在本质上是一个代理的背后托管gwt应用程序。当位于代理之后时,url将更改为类似的内容 当我尝试在代理后面访问时,Gwt抛出了一个错误: myAppServlet:错误:模块路径 请求, /foo/bar/00_00_00/myapp/myapp/,不是 在与此相同的web应用程序中 servlet,/myapp。您的模块可能不可用 请正确配置或删除您的客户端 服务器代码可能已经过时了 当gwt尝试序列化java对象并将其发送回客户端时,该错误似乎发生在rpc请求之后 有没有办法通知GWT该应用程序在代理之后 更新: 第一个请求似乎很有效。但是其他所有的请求都失败了??!! 我发现错误来自RemoteServiceServlet.loadSerializationPolicy。不幸的是,我无法覆盖,因为它是静态的是否可以通过编程方式更改GWT RPC servlet路径?,gwt,gilead,Gwt,Gilead,从运行时,我的GWT应用程序工作正常 我需要在本质上是一个代理的背后托管gwt应用程序。当位于代理之后时,url将更改为类似的内容 当我尝试在代理后面访问时,Gwt抛出了一个错误: myAppServlet:错误:模块路径 请求, /foo/bar/00_00_00/myapp/myapp/,不是 在与此相同的web应用程序中 servlet,/myapp。您的模块可能不可用 请正确配置或删除您的客户端 服务器代码可能已经过时了 当gwt尝试序列化java对象并将其发送回客户端时,该错误似乎发生
也许可以通过编程方式设置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。因此,既然两条路径匹配,它就工作了!