Как развернуть приложение JAX-RS?

Спецификация JAX-RS 1.1 указана на стр. 6:

Если подclass приложения не присутствует, добавленный сервлет ДОЛЖЕН быть назван:

javax.ws.rs.core.Application 

Что такое добавленный сервлет? Это может быть произвольный сервлет?

Если присутствует подclass приложения, и уже установлен сервлет, который имеет параметр инициализации сервлета с именем:

 javax.ws.rs.Application 

Опять же, что такое «сервлет» здесь?

Если присутствует подclass приложения, который не обрабатывается существующим сервлетом, то сервлет, добавленный ContainerInitializer, ДОЛЖЕН быть назван с полным именем подclassа Application.

«Сервлет, добавленный ContainerInitializer» означает, что servlets автоматически добавляются? Как будет выглядеть конфигурация?

На данный момент я не использую ни class Application, ни web.xml, и он работает (с GlassFish 3.1). Требуется ли для этого механизма развертывания сканирование полного classа, что может быть медленным с большими библиотеками?

Как развернуть контейнеры Servlet?

В Интернете существует запутанное количество вариантов конфигурации. См. Этот пример с параметрами контекста в web.xml (не работает для меня!). Каков предпочтительный способ развертывания приложения JAX-RS?

Существует несколько вариантов развертывания в контейнере Java EE 6 (в частности, реализация Servlet 3.0):

Самое простое:

    javax.ws.rs.core.Application 1   javax.ws.rs.core.Application /rest/*   

Затем все @Path и @Provider найденные в вашем веб-приложении, будут доступны в приложении JAX-RS по умолчанию с шаблоном URL сервлета "/rest/*" .

Если у вас есть один или несколько classов, которые расширяют javax.ws.rs.core.Application , вы можете указать так:

    com.example.jaxrs.MyApplication 1   com.example.jaxrs.MyApplication /rest/*   

Вы можете сделать это выше, если хотите вернуть только определенные classы @Path / @Provider по URL-адресу (так что вы могли бы иметь второй MyApplication2 с другим шаблоном URL выше).

Вы также можете полностью пропустить весь web.xml и просто аннотировать свой class @ApplicationPath который будет служить шаблоном URL. Я бы порекомендовал держать web.xml в любом случае, потому что вам, вероятно, придется добавлять другую информацию о веб-приложении.

Если вам интересно, откуда появился servlet-class , он автоматически добавляется в среду. Вы можете получить представление, посмотрев Servlet 3.0 ServletContext .

С WAS 8.5 я меняю web.xml, чтобы добавить:

  com.ibm.websphere.jaxrs.server.IBMRestServlet  javax.ws.rs.Application com.tada.rest.RestApplication  1 javax.ws.rs.core.Application   javax.ws.rs.core.Application /rest/*  

Моя функция RestApplication выглядит так:

 import java.util.HashSet; import java.util.Set; import javax.ws.rs.core.Application; public class RestApplication extends Application { @Override public Set> getClasses() { Set> sets = new HashSet>(); sets.add(RestService.class); return sets; } } 

Мой RestService выглядит так:

 @Path("/tada") public class RestService { @GET public String getSomething() { return "tada"; } } 

И я добавляю в pom.xml зависимость:

  javax.ws.rs javax.ws.rs-api 2.0  

С Servlet3.0 следуйте этому. Это работает для меня.

  JAX-RS Tools Generated - Do not modify JAX-RS Servlet com.ibm.websphere.jaxrs.server.IBMRestServlet  javax.ws.rs.Application your.restsrv.config.RESTConfig  1 true false   javax.ws.rs.core.Application 1   javax.ws.rs.core.Application /rest/*   JAX-RS Servlet /*  

Как я сказал в комментарии выше, все зависит от структуры, которую вы хотите использовать.

http://syrupsucker.blogspot.com/2008/10/deploying-jersey-in-tomcat-60.html для Джерси http://syrupsucker.blogspot.com/2008/10/deploying-resteasy-in-tomcat-60 .html для RESTeasy

Насколько я знаю, JAX-RS не содержит спецификации для развертывания.

  • Кажется, что сервлет обрабатывает несколько одновременных запросов браузера синхронно
  • Как получить доступ к статическим ресурсам при сопоставлении глобального сервлет-controllerа на / *
  • Фильтр аутентификации и сервлет для входа в систему
  • Как получить идентификатор fragmentа URL из HttpServletRequest
  • Заполнение каскадных выпадающих списков в JSP / Servlet
  • Как я могу вызвать конкретный метод Java при нажатии / отправке события определенной кнопки в JSP?
  • Как проверить мой сервлет с помощью JUnit
  • Как обеспечить относительный путь в classе File для загрузки любого файла?
  • Давайте будем гением компьютера.