Изучаем Java EE 7 - [240]
Что нового в JAX-RS 2.0
Спецификация JAX-RS 2.0 (запрос на спецификацию JSR 339) — это основной релиз, сосредоточенный на интеграции с платформой Java EE 7 и ее новыми возможностями. К числу основных новых возможностей JAX-RS 2.0 относятся:
• клиентский API, отсутствовавший во всех технических версиях JAX-RS 1.x, поэтому в каждой реализации применялся свой собственный проприетарный API. JAX-RS 2.0 ликвидирует этот пробел благодаря низкоуровневому API для выстраивания запросов;
• в JAX-RS 2.0 появились фильтры и перехватчики, напоминающие обработчики SOAP или перехватчики управляемых компонентов. Поэтому теперь вы можете перехватывать запрос и ответ и обрабатывать их, как вам требуется;
• появился новый механизм асинхронной обработки, который позволяет внедрять интерфейсы для длинного опроса или реализовывать отправку данных по инициативе сервера;
• достигнута интеграция с технологией валидации компонентов, позволяющая ограничивать ваши веб-службы с передачей состояния представления.
В табл. 15.4 перечислены основные пакеты, определенные в спецификации JAX-RS.
Пакет | Описание |
---|---|
javax.ws.rs | Высокоуровневые интерфейсы и аннотации, используемые для создания веб-служб с передачей состояния представления |
javax.ws.rs.client | Классы и интерфейсы нового клиентского API JAX-RS |
javax.ws.rs.container | Контейнер-специфичный API JAX-RS |
javax.ws.rs.core | Низкоуровневые интерфейсы и аннотации, используемые для создания веб-ресурсов с передачей состояния представления |
javax.ws.rs.ext | API, предоставляющие расширения для типов, поддерживаемых в JAX-RS API |
Справочная реализация
Справочная реализация JAX-RS называется Jersey. Это свободный проект, который одновременно подчиняется двум лицензиям: CDDL и GPL. Jersey также предоставляет специальный API для расширения самой Jersey.
Существуют и другие реализации JAX-RS, в частности CXF (Apache), RESTEasy (JBoss) и Restlet (сравнительно старый проект, появившийся еще до того, как была завершена подготовка спецификации JAX-RS).
Написание веб-служб с передачей состояния представления
Здесь обсуждались некоторые настолько низкоуровневые концепции (взять хотя бы протокол HTTP), что у вас вполне могли накопиться самые разные предположения о том, как может выглядеть код при разработке веб-службы в стиле REST. Начнем с хорошего: вам не придется ни писать служебный код для переваривания HTTP-запросов, ни генерировать HTTP-ответы вручную. JAX-RS — это очень красивый API, позволяющий описать веб-службу с передачей состояния представления с помощью всего нескольких аннотаций. Веб-службы в стиле REST — это обычные POJO, имеющие минимум один метод, аннотированный javax.ws.rs.Path. В листинге 15.3 показан типичный ресурс такого рода.
>@Path("/book")
>public class BookRestService {
>··@GET
>··@Produces("text/plain")
>··public String getBookTitle() {
>····return "H2G2";
>··}
>}
BookRestService — это класс Java, аннотированный @Path. Это означает, что путь к ресурсу будет лежать через путь URI /book. Метод getBookTitle() помечен как предназначенный для обработки HTTP-операций GET (на это указывает аннотация @GET). Данный метод генерирует текст (MIME-тип такого содержимого — text/plain; я также мог бы воспользоваться константой MediaType.TEXT_PLAIN). Для доступа к этому ресурсу вам понадобится HTTP-клиент, например браузер, в котором можно открыть URL http://www.myserver.com/book.
Спецификация JAX-RS является по своей природе HTTP-ориентированной и имеет несколько четко определенных классов и аннотаций для работы с HTTP и URI. Ресурс может включать несколько представлений, поэтому API обеспечивает поддержку разнообразных типов содержимого, а также использует JAXB для маршалинга и демаршалинга XML-представлений в объекты и обратно. JAX-RS также не зависит от контейнера. Поэтому развертывание ресурсов можно выполнять в GlassFish и во многих других сервлетных контейнерах.
Структура веб-службы с передачей состояния представления
Из листинга 15.3 понятно, что REST-служба не реализует никаких интерфейсов, а также не расширяет какого-либо класса. Единственная обязательная аннотация, нужная для превращения POJO в REST-службу, — это @Path. JAX-RS работает на основе «конфигурации по исключениям», то есть располагает набором аннотаций для конфигурирования стандартного поведения. Ниже перечислены требования для написания REST-службы:
• класс должен быть аннотирован с помощью @javax.ws.rs.Path (в JAX-RS 2.0 отсутствует XML-эквивалент метаданных, поскольку нет дескриптора развертывания);
• класс должен быть определен как общедоступный (публичный), при этом не должен быть ни финальным, ни абстрактным;
• классы корневых ресурсов (имеющие аннотацию @Path) должны иметь действующий по умолчанию общедоступный конструктор. Классы некорневых ресурсов не требуют такого конструктора;
• класс ни в коем случае не должен определять метод finalize();
• для добавления возможностей EJB к REST-службе класс должен иметь аннотацию @javax.ejb.Stateless или @javax.ejb.Singleton (см. главу 7);
Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.
Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.