GWT RPC警告:servlet具有映射,但web.xml没有相应的映射

时间:2011-03-30 18:25:09

标签: java gwt gwt-rpc gxt

我对GWT-RPC有一个奇怪的问题。我设置了一个工作正常的Async RPC处理程序。但是当我运行我的服务器(使用ant devmode)时,我收到以下警告:

[WARN] Module declares a servlet class 'x.y.server.LoginServiceImpl' 
with a mapping to '/login/login', but the web.xml has no corresponding mapping

要清楚,我的代码中没有指定“/ login / login”。我想只使用 / login 。为什么要两次添加?它几乎看起来像一个GWT错误。以下是配置的其余部分:

我的web.xml servlet-mapping如下所示:

<servlet-mapping>
    <servlet-name>LoginServiceImpl</servlet-name>
    <url-pattern>/login</url-pattern>
</servlet-mapping>

我的模块文件包含以下内容:

<servlet path="/login" class="x.y.server.LoginServiceImpl" />

那么为什么我在任何地方都没有定义 / login / login 的警告?感谢任何帮助。谢谢。

-tjw

3 个答案:

答案 0 :(得分:4)

您可能已将.gwt.xml文件中的rename-to属性定义为:

<module rename-to='login'>

您的LoginService(界面!)可能包含注释

@RemoteServiceRelativePath("login")

生成的路径(即客户端调用的路径)然后是“/ login / login”。

我不确定,如果你能轻松实现“/ login”,但是你能尝试的是:

LoginServiceAsync service = GWT.create(LoginService.class);
ServiceDefTarget serviceDefTarget = (ServiceDefTarget) service;
serviceDefTarget.setServiceEntryPoint(GWT.getHostPageBaseURL() + "login");

我没有测试过,所以这可能需要稍微调整一下(?)。来自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.
 */

答案 1 :(得分:1)

我解决了这个问题,但仍然指向任何可以告诉我为什么的人。我从模块定义中删除了它:

<servlet path="/login" class="x.y.server.LoginServiceImpl" />

现在一切正常,没有任何警告。问题:为什么我被指示将其置于首位?它有什么用途?

-tjw

答案 2 :(得分:1)

如果您使用的是Netbeans,它会在模块文件中说:“不要在这里定义servlet,请使用web.xml”。

http://code.google.com/webtoolkit/doc/latest/DevGuideOrganizingProjects.html#DevGuideModuleXml说:

: 对于RPC,此元素加载在指定的URL路径上安装的servlet类。 URL路径应该是绝对路径,并且具有目录的形式(例如,/ calendar)。然后,您的客户端代码通过使用@RemoteServiceRelativePath属性注释服务接口来指定此URL映射。可以以这种方式加载任意数量的servlet,包括来自继承模块的servlet。

该元素仅适用于GWT的嵌入式服务器端服务器端调试功能。

注意:从GWT 1.6开始,此标记不再在开发模式下加载servlet,而是必须在war目录中配置WEB-INF / web.xml以加载所需的任何servlet。