Настройка web.xml для веб-сервисов и сервлетов - PullRequest
2 голосов
/ 15 июня 2010

Я новичок в Рестлетс. Попытка настроить web.xml (на JBoss). У меня есть 2 записи, одна для сервлета (не имеет ничего общего с веб-сервисами), другая для веб-сервисов, используя Restlet. Вот записи ..

 <servlet>
  <servlet-name>AuthenticationServlet</servlet-name>
  <servlet-class>com.safeid.web.server.api.servlet.AuthenticationServlet</servlet-class>
  <load-on-startup>2</load-on-startup>
 </servlet>

 <servlet-mapping>
  <servlet-name>AuthenticationServlet</servlet-name>
  <url-pattern>/authenticate/*</url-pattern>
 </servlet-mapping>


<!--  Start of Entries for the REST Web Services. -->

  <context-param>
   <param-name>org.restlet.application</param-name>
   <param-value>com.safeid.web.server.SafeIDRouterApplication</param-value>
  </context-param>

 <servlet>
  <servlet-name>RestletServlet</servlet-name>
  <servlet-class>com.noelios.restlet.ext.servlet.ServerServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>


 <servlet-mapping>
  <servlet-name>RestletServlet</servlet-name>
  <url-pattern>/*</url-pattern>
 </servlet-mapping>
<!-- END of Entries for the REST Web Services.-->

Оба не работают вместе. В приведенной выше настройке Рестлет работает. Однако, когда я изменяю

RestletServlet / *

что-то вроде

<servlet-mapping>
  <servlet-name>RestletServlet</servlet-name>
  <url-pattern>/credential/*</url-pattern>
 </servlet-mapping>

Рестлет перестает работать и AuthenticationServlet работает нормально. Что мне здесь не хватает?

Ответы [ 2 ]

3 голосов
/ 10 сентября 2011

У меня было похожее разочарование. Возможно, то, что я узнал, может помочь.

У меня были записи Маршрутизатора в моем классе Приложения, как это:

router.attach("/users", UsersResource.class);

И все работало нормально, когда мое отображение сервлета было таким:

<servlet-mapping>
    <servlet-name>Sandbox</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

Когда я изменил что-то вроде этого:

<servlet-mapping>
    <servlet-name>Sandbox</servlet-name>
    <url-pattern>/users/*</url-pattern>
</servlet-mapping>

перестал работать.

Проблема в том, что контейнер сервлета «потребляет» или удаляет часть URL-адреса, которой он соответствует. В этом случае он удаляет «/ users». Так что, если вы использовали URL-адрес, как это:

http://www.mywebsite.com/users

вы должны изменить его на:

http://www.mywebsite.com/users/users

Конечно, вы можете сделать URL-шаблон таким, каким хотите:

<servlet-mapping>
    <servlet-name>Sandbox</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

и тогда вы получите к нему следующий доступ:

http://www.mywebsite.com/rest/users

Шаблон url удаляется, и вы получаете то, что осталось в вашем классе Application для ваших собственных целей маршрутизации.

НТН

1 голос
/ 15 июня 2010

Похоже, вам не хватает init-параметров, как в примере ниже.

<servlet>
    <servlet-name>MyApplication</servlet-name> 
    <servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class>
    <init-param>
        <param-name>org.restlet.application</param-name>
        <param-value>my.class.that.extends.Application.MyApplication</param-value>
    </init-param> 
</servlet>

Вам нужен класс, расширяющий org.restlet.Application (по крайней мере, в Restlet 2.0 в любом случае).

...