GWT RPC Предупреждение: сервлет имеет отображение, но web.xml не имеет соответствующего отображения - PullRequest
4 голосов
/ 30 марта 2011

У меня странная проблема с 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".Я хочу использовать только / логин .Почему он добавляет его дважды?Это почти похоже на ошибку 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 ]

4 голосов
/ 30 марта 2011

Вы, вероятно, определили свой атрибут rename-to в своем файле .gwt.xml как:

<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");

Я не проверял это, так что, возможно, потребуется немного подправить (?).Из Javadoc ServiceDefTarget:

/**
 * 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 голос
/ 31 марта 2011

Если вы используете Netbeans, в файле модуля говорится: «Не определяйте здесь сервлеты, используйте web.xml».

http://code.google.com/webtoolkit/doc/latest/DevGuideOrganizingProjects.html#DevGuideModuleXml скажем:

:Для RPC этот элемент загружает класс сервлета, смонтированный по указанному пути URL.Путь URL должен быть абсолютным и иметь форму каталога (например, / calendar).Затем ваш клиентский код задает это сопоставление URL-адреса, аннотируя интерфейс службы атрибутом @RemoteServiceRelativePath.Таким способом может быть загружено любое количество сервлетов, в том числе из унаследованных модулей.

Элемент применяется только к встроенной функции отладки на стороне сервера GWT.

ПРИМЕЧАНИЕ: начиная с GWT 1.6,этот тег больше не загружает сервлеты в режиме разработки, вместо этого вы должны настроить WEB-INF / web.xml в вашем каталоге war для загрузки любых необходимых сервлетов.

1 голос
/ 30 марта 2011

Я решил, но все равно указывает на любого, кто может сказать мне , почему .Я удалил это из определения моего модуля:

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

и теперь все работает без предупреждения.Вопрос: почему я получил указание поставить это на первое место?Какую цель он служит?

-tjw

...