Настройка сети.xml для веб-сервисов и сервлетов
Я новичок в Рестлетах. Пытаюсь настроить сеть.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.-->
Оба не работают вместе. В приведенной выше настройке работает Restlet. Однако, когда я изменяю
RestletServlet /*
К чему-то вроде
<servlet-mapping>
<servlet-name>RestletServlet</servlet-name>
<url-pattern>/credential/*</url-pattern>
</servlet-mapping>
Restlet перестает работать, и AuthenticationServlet работает нормально. Чего мне здесь не хватает?
2 ответа:
У меня было такое же разочарование. Возможно, то, что я узнал, может помочь.
У меня были записи маршрутизатора в моем классе приложений, такие как:
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-адреса удаляется, и вы получаете все, что осталось в вашем классе приложений для ваших собственных целей маршрутизации.
HTH
Похоже, что вы пропускаете init-params, как в примере ниже.
<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.Приложение (по крайней мере, в Restlet 2.0).