Servlet 3.0 — имеет множество новаторских функций, которые в конечном итоге изменят то, как разработчики будут кодировать и писать веб-приложения JEE — некоторые могут сказать, что его соглашения не соответствуют большей части нашего понимания того, как вещи «должны» работать в теории, но это одна из прелестей инноваций и постоянного совершенствования; оспаривая соглашение и дать лучшее и эффективное решение.
Темы, освещенные в этом блоге:
- Простота развития — что изменилось?
- Динамическая регистрация сервлетов и фильтров
- Pluggability
- Ресурсы в комплекте jar-файлов — новая функция, называемая веб-фрагментами.
Легкость развития
Это одна из субъективных тем в мире разработки JEE — она не о перетаскивании мышью постоянно, а о том, как вы можете усовершенствовать свой путь развития, который соответствует стандартам, оптимален и строго проверен в соответствии с соглашениями.
Декларативный стиль программирования с помощью аннотаций. В JEE6 web.xml теперь является необязательным, и все POJOS теперь могут быть помечены с помощью аннотаций. Вы можете объявить сервлеты, фильтры, прослушиватели, параметры инициализации и т. Д. — почти все, что находится в файле web.xml, теперь можно настроить с помощью аннотаций.
- @WebServlet — определение сервлета
- @WebFilter — Определить фильтр
- @WebListener — определить слушателя
- @WebInitParam — определение параметров инициализации
- @MultipartConfig — определяет свойства загрузки файла
- @ServletSecurity — определение ограничений безопасности
Примечание. Хотя это можно сделать, разработчики могут использовать файл web.xml для переопределения этих значений.
Я приложил пример для тестирования.
Динамическая регистрация сервлетов и фильтров
Другая доступная функция — динамическая регистрация — выполняется во время инициализации ServletContext:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
public class TestServletContextListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { ServletContext servletContext = sce.getServletContext(); ServletRegistration.Dynamic dynamic = servletContext.addServlet("DynamicServlet","com.mycom.MyServlet"); dynamic.addMapping("/dynamicServlet"); // URL mapping dynamic.setAsyncSupported(true); }} |
и, конечно, вы можете посмотреть и подключить динамический сервлет / фильтр
|
1
2
3
|
ServletRegistration declared = ServletContext.getServletRegistration("DeclaredServlet");declared.addMapping("/declaredServlet");declared.setInitParameter("param", "value"); |
Загрузите проект Maven здесь .
Pluggability
Разрешить использование сторонних фреймворков без конфигурации котельной в дескрипторах развертывания. Модифицируйте web.xml, чтобы позволить фреймворкам быть автономными в своем собственном JAR-файле и API-интерфейсах конфигурации программ. Использование аннотаций.
Мотивация подключаемости заключается в том, чтобы уменьшить сложность размещения всей конфигурации в одном единственном месте (web.xml), если требуется конкретная среда. Например, если разработчик нуждается в поддержке Spring для существующего веб-приложения — первое, что нужно сделать, это поместить в сервлет / слушатель Spring для его поддержки — это может стать уродливым, когда в будущем появится новая технология EE, Вам нужно снова поместить все в файл web.xml.
Теперь с JEE6 — вы можете создать подпроект с web-фрагментом. Xml, который будет имитировать раздел основного web.xml — это позволяет независимо создавать и изолировать дальнейшие улучшения (или функциональные требования к подключаемым модулям). Ниже приведен пример веб-фрагмента.xml
|
01
02
03
04
05
06
07
08
09
10
11
|
<web-fragment> <servlet> <servlet-name>welcome</servlet-name> <servlet-class>com.mycom.WelcomeServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>welcome</servlet-name> <url-pattern>/Welcome</url-pattern> </servlet-mapping> ...</web-fragment> |
Это близко / очень похоже на web.xml.
Загрузите пример веб-фрагмента проекта здесь .
Ресурсы в комплекте jar файлов
- Ресурсы Static и JavaServerTM Pages (JSP) больше не ограничиваются корнем документа веб-приложения.
- Может быть размещен внутри WEB-INF / lib / [* .jar] / META-INF / resources
- Контейнер должен учитывать это новое расположение при обработке HTTP-запросов и вызовов методов ServletContext # getResource или ServletContext # getResourceAsStream
- Однако ресурсы в корне документа имеют приоритет над ресурсами в связанных JAR-файлах.
С учетом веб-фрагментов и поддержки jar-пакетов новых ресурсов функциональные требования, требующие сквозной обработки, теперь можно разрабатывать отдельно от основного родительского приложения.
Новый и улучшенный Servlet 3.0 предлагает множество эффективных инструментов, которые позволят разработчикам создавать более качественные и надежные приложения на платформе. Аннотация / Декларативное программирование — выводит дескрипторы на новую высоту, поскольку сервлеты, фильтры и прослушиватели теперь могут выполняться на уровне кода Java. Динамическая регистрация сервлетов, фильтров, прослушивателей и т. Д. Может использоваться для создания JIT-проектов, которые будут обрабатывать конкретные бизнес-случаи, а поддержка DI и CDI позволяет разработчикам упростить парадигму, просто позволяя контейнеру позаботиться о том, как создаются объекты, и о лучших из них. В целом, веб-фрагменты и поддержка jar-пакетов ресурсов по-разному разделяют разработку, поскольку позволяют изолировать функционально-специфический веб-проект, используя существующие технологии JEE без необходимости иметь дело с большим количеством настроек через родительское веб-приложение.
