Как развернуть приложение JAX-RS?
Спецификация JAX-RS 1.1 указана на стр. 6:
Если подclass приложения не присутствует, добавленный сервлет ДОЛЖЕН быть назван:
javax.ws.rs.core.Application
Что такое добавленный сервлет? Это может быть произвольный сервлет?
- Tomcat VS Jetty
- Spring v3 нет объявления для элемента 'mvc: resources'
- Сервлет и фильтр
- Использование специального сервлета автоматического запуска для инициализации при запуске и совместного использования данных приложения
- Как сохранить значения полей формы HTML в JSP после отправки формы в Servlet?
Если присутствует подclass приложения, и уже установлен сервлет, который имеет параметр инициализации сервлета с именем:
javax.ws.rs.Application
Опять же, что такое «сервлет» здесь?
Если присутствует подclass приложения, который не обрабатывается существующим сервлетом, то сервлет, добавленный ContainerInitializer, ДОЛЖЕН быть назван с полным именем подclassа Application.
«Сервлет, добавленный ContainerInitializer» означает, что servlets автоматически добавляются? Как будет выглядеть конфигурация?
На данный момент я не использую ни class Application, ни web.xml, и он работает (с GlassFish 3.1). Требуется ли для этого механизма развертывания сканирование полного classа, что может быть медленным с большими библиотеками?
Как развернуть контейнеры Servlet?
В Интернете существует запутанное количество вариантов конфигурации. См. Этот пример с параметрами контекста в web.xml (не работает для меня!). Каков предпочтительный способ развертывания приложения JAX-RS?
- Как сделать загрузку асинхронных (AJAX) файлов с помощью iframe?
- Дизайн шаблонов веб-приложений
- Как запустить фоновое задание в веб-приложении на сервлет?
- Можно ли исключить некоторые конкретные URL-адреса из внутри ?
- RequestDispatcher.forward () vs HttpServletResponse.sendRedirect ()
- Значение, переданное с request.setAttribute (), недоступно request.getParameter ()
- Разница между JSP вперед и redirectм
- Кэширование ответа HTTP
Существует несколько вариантов развертывания в контейнере 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 не содержит спецификации для развертывания.