gwt - проблема с доступом к сервлету в унаследованном модуле - PullRequest
2 голосов
/ 19 января 2011

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

У меня есть виджет MapServiceWidget в одном модуле под названием «webvisualisation», который использует RPC для получения данных из интерфейса MapService Rpc. Я наследую этот модуль в другом модуле GWT, который называется «led» (я упаковал «webvis ...» в jar с исходниками, добавлен в модуль «led»). Затем я пытаюсь создать этот виджет во втором ("ведомом") модуле и получаю сообщение

«Не удалось найти причину доступа / led / mapservice».

И конечно, он не может найти его, потому что mapservice определен в унаследованном модуле "webvisualisation".

Вопрос в том, почему он ищет эту реализацию сервлера в модуле "led", а не в "webvisualisation", где он определен? Я проверил все определения модулей и файлы web.xml несколько раз и ознакомился с документацией, кажется, все в порядке ... но это не так. Если мое описание не ясно, я могу опубликовать некоторые файлы конфигурации / исходного кода.

Это 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>

А для светодиодов это просто обычный сгенерированный файл образца

<!-- 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>

Ответы [ 2 ]

0 голосов
/ 20 января 2011

Я получил это работает. Я просто добавил записи сервлета и отображения сервлета в «ведомые» модули 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 отображается здесь на URL / led / mapservice, где GWT, кажется, ищет его, в отличие от оригинального модуля "webvisualisation" web.xml, где он был сопоставлен с / wevisualisation / mapservice.

Я не очень доволен этим решением, оно работает, но требует добавления отображения сервлета в WebApps web.xml для каждого сервлета в унаследованном модуле, который я хочу использовать или который используется где-то в этом унаследованном модуле.

Тем не менее, я хотел бы знать, почему определения и отображения сервлетов из унаследованных модулей не включаются в webApps web.xml во время компиляции / компоновки ... Я думаю, что это должно работать без таких хаков, поэтому я что-то не так делаю.

0 голосов
/ 19 января 2011

Кажется, вы столкнулись с проблемой пути к классам. Возможно, проверьте, что ваш webvisualisation.jar находится в каталоге WEB-INF / lib вашего веб-приложения.

...