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 без необходимости иметь дело с большим количеством настроек через родительское веб-приложение.