Статьи

Servlet 3.0 Обзор

Servlet 3.0 — имеет множество новаторских функций, которые в конечном итоге изменят то, как разработчики будут кодировать и писать веб-приложения JEE — некоторые могут сказать, что его соглашения не соответствуют большей части нашего понимания того, как вещи «должны» работать в теории, но это одна из прелестей инноваций и постоянного совершенствования; оспаривая соглашение и дать лучшее и эффективное решение.

Темы, освещенные в этом блоге:

  1. Простота развития — что изменилось?
  2. Динамическая регистрация сервлетов и фильтров
  3. Pluggability
  4. Ресурсы в комплекте jar-файлов — новая функция, называемая веб-фрагментами.

Легкость развития

Это одна из субъективных тем в мире разработки JEE — она ​​не о перетаскивании мышью постоянно, а о том, как вы можете усовершенствовать свой путь развития, который соответствует стандартам, оптимален и строго проверен в соответствии с соглашениями.

Декларативный стиль программирования с помощью аннотаций. В JEE6 web.xml теперь является необязательным, и все POJOS теперь могут быть помечены с помощью аннотаций. Вы можете объявить сервлеты, фильтры, прослушиватели, параметры инициализации и т. Д. — почти все, что находится в файле web.xml, теперь можно настроить с помощью аннотаций.

  1. @WebServlet — определение сервлета
  2. @WebFilter — Определить фильтр
  3. @WebListener — определить слушателя
  4. @WebInitParam — определение параметров инициализации
  5. @MultipartConfig — определяет свойства загрузки файла
  6. @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-файлах.

javaee6_servlet3-0_basics__1_-pdf__page_29_of_32_

С учетом веб-фрагментов и поддержки jar-пакетов новых ресурсов функциональные требования, требующие сквозной обработки, теперь можно разрабатывать отдельно от основного родительского приложения.

Новый и улучшенный Servlet 3.0 предлагает множество эффективных инструментов, которые позволят разработчикам создавать более качественные и надежные приложения на платформе. Аннотация / Декларативное программирование — выводит дескрипторы на новую высоту, поскольку сервлеты, фильтры и прослушиватели теперь могут выполняться на уровне кода Java. Динамическая регистрация сервлетов, фильтров, прослушивателей и т. Д. Может использоваться для создания JIT-проектов, которые будут обрабатывать конкретные бизнес-случаи, а поддержка DI и CDI позволяет разработчикам упростить парадигму, просто позволяя контейнеру позаботиться о том, как создаются объекты, и о лучших из них. В целом, веб-фрагменты и поддержка jar-пакетов ресурсов по-разному разделяют разработку, поскольку позволяют изолировать функционально-специфический веб-проект, используя существующие технологии JEE без необходимости иметь дело с большим количеством настроек через родительское веб-приложение.

Ссылка: сервлет 3.0 от нашего партнера JCG Элвина Рейеса в блоге Элвина «Джей» Рейес .