【问题标题】:gwt - problem accessing servlet in inherited modulegwt - 在继承的模块中访问 servlet 的问题
【发布时间】: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>

【问题讨论】:

    标签: gwt gwt-rpc


    【解决方案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 中......我认为它应该在没有这种黑客攻击的情况下工作,所以我做错了。

    【讨论】:

      猜你喜欢
      • 2021-07-24
      • 2020-09-01
      • 2012-09-02
      • 1970-01-01
      • 1970-01-01
      • 2011-08-26
      • 2014-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多