gwt - 在继承的模块中访问 servlet 的问题
Posted
技术标签:
【中文标题】gwt - 在继承的模块中访问 servlet 的问题【英文标题】:gwt - problem accessing servlet in inherited module 【发布时间】:2011-01-19 18:12:58 【问题描述】:我正在尝试将我的应用程序划分为模块,但我遇到了这个问题:
我在一个名为“webvisualisation”的模块中有一个小部件 MapServiceWidget,它使用 RPC 从 MapService Rpc 接口获取数据。我在另一个名为“led”的 GWT 模块中继承了这个模块(我将“webvis ...”打包到带有源的 jar 中,添加到模块“led”定义中)。然后我尝试在第二个(“led”)模块中创建这个小部件并获取消息
“问题访问 /led/mapservice 原因未找到”。
并确保它找不到它,因为地图服务是在继承的“webvisualisation”模块中定义的。
问题是为什么它在“led”模块中而不是在定义它的“webvisualisation”中寻找这个 servler 实现?我多次检查了所有模块定义和 web.xml 文件并查阅了文档,看起来还可以..但事实并非如此。如果我的描述不清楚,我可以发布一些配置/源文件。
这是 webvisualisation 模块的 web.xml
<!-- Servlets -->
<servlet>
<servlet-name>mapservice</servlet-name>
<servlet-class>pl.gmike.webvis.server.MapServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>mapservice</servlet-name>
<url-pattern>/webvisualisation/mapservice</url-pattern>
</servlet-mapping>
而对于led,它只是普通生成的示例文件
<!-- Servlets -->
<servlet>
<servlet-name>greetServlet</servlet-name>
<servlet-class>pl.led.server.GreetingServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>greetServlet</servlet-name>
<url-pattern>/led/greet</url-pattern>
</servlet-mapping>
【问题讨论】:
【参考方案1】:您似乎遇到了类路径问题。也许检查您的 webvisualisation.jar 是否在您的 Web 应用程序的 WEB-INF/lib 目录中。
【讨论】:
你说得对,它不存在,但我已将它添加到 WEB-INF/lib 中,但仍然出现相同的错误。我从 Eclipse 以托管模式运行它,并在控制台“警告:找不到文件:/led/mapservice”中收到此消息。 我们可以查看您的 web.xml 文件的相关部分吗?【参考方案2】:我让它工作了。我刚刚将 servlet 和 servlet 映射条目添加到“led”模块 web.xml,所以它现在看起来像这样:
<!-- Servlets -->
<servlet>
<servlet-name>greetServlet</servlet-name>
<servlet-class>pl.led.server.GreetingServiceImpl</servlet-class>
</servlet>
<servlet>
<servlet-name>mapservice</servlet-name>
<servlet-class>pl.gmike.webvis.server.MapServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>greetServlet</servlet-name>
<url-pattern>/led/greet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>mapservice</servlet-name>
<url-pattern>/led/mapservice</url-pattern>
</servlet-mapping>
如您所见,mapservice servlet 在此处映射到 GWT 似乎在寻找它的 /led/mapservice URL,这与在原始“webvisualisation”模块 web.xml 中映射到 /wevisualisation/mapservice 不同。
我对这个解决方案不太满意,它可以工作,但它需要在 WebApps web.xml 中为我想要使用的继承模块中的每个 servlet 添加一个 servlet 映射,或者在这个继承模块的某个地方使用。
我仍然想知道为什么 servlet 定义和来自继承模块的映射在编译/链接期间不包含在 WebApps web.xml 中......我认为它应该在没有这种黑客攻击的情况下工作,所以我做错了。
【讨论】:
以上是关于gwt - 在继承的模块中访问 servlet 的问题的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 GWT-RPC 以外的方式访问 GWT servlet?