Jakarta Servlet

редактировать
Класс языка программирования Jakarta EE Срок службы файла JSP

A Jakarta Servlet (ранее Java Servlet) - это Java программный компонент, расширяющий возможности сервера. Хотя сервлеты могут отвечать на многие типы запросов, они чаще всего реализуют веб-контейнеры для размещения веб-приложений на веб-серверах и, таким образом, квалифицируются как сервлет на стороне сервера. веб-API. Такие веб-сервлеты являются аналогом Java других технологий динамического веб-содержимого, таких как PHP и ASP.NET.

Содержание
  • 1 Введение
  • 2 История
  • 3 Жизненный цикл сервлета
  • 4 Пример
  • 5 Контейнерные серверы
  • 6 Ссылки
  • 7 Внешние ссылки
Введение

Процессы сервлета Jakarta или хранит Java-класс в Jakarta EE, который соответствует Jakarta Servlet API, стандарту для реализации классов Java, отвечающих на запросы. Сервлеты могут в принципе взаимодействовать по любому протоколу клиент-сервер, но чаще всего они используются с HTTP. Таким образом, «сервлет» часто используется как сокращение от «HTTP-сервлета». Таким образом, разработчик программного обеспечения может использовать сервлет для добавления динамического содержимого к веб-серверу с использованием платформы Java. Сгенерированный контент обычно представляет собой HTML, но могут быть и другие данные, такие как XML и, чаще, JSON. Сервлеты могут поддерживать состояние в переменных сеанса во многих серверных транзакциях с помощью файлов cookie HTTP или сопоставления URL-адресов.

API сервлетов Jakarta имеет, чтобы в некоторой степени заменены двумя стандартными технологиями Java для веб-служб:

Для развертывания и запуска сервлета веб-контейнер должен использоваться. Веб-контейнер (также известный как контейнер сервлетов) - это, по сути, компонент веб-сервера, который взаимодействует с сервлетами. Веб-контейнер отвечает за управление жизненным циклом сервлетов, сопоставление URL-адреса с конкретным сервлетом и обеспечение правильности прав доступа у инициатора запроса URL.

Servlet API, содержащийся в Java package иерархии javax.servlet , определяет ожидаемые взаимодействия веб-контейнер и сервлет.

A Сервлет - это объект, который получает запрос и генерирует ответ на основе этого запроса. Базовый пакет сервлета определяет объекты Java для представления запросов и ответов сервлета, а также объекты, отражающие параметры конфигурации сервлета и среду выполнения. Пакет javax.servlet.http определяет HTTP -специфичные подклассы общих элементов сервлета, включая объекты управления сеансом, которые отслеживают несколько запросов и ответов между веб-сервером. и клиент. Сервлеты могут быть упакованы в WAR-файл как веб-приложение.

Сервлеты могут автоматически создаваться из Jakarta Server Pages (JSP) с помощью Jakarta Server Pages компилятор. Разница между сервлетами и JSP заключается в том, что сервлеты обычно встраивают HTML в код Java, тогда как JSP встраивают код Java в HTML. Хотя прямое использование сервлетов для генерации HTML (как показано в приведенном ниже примере) стало редкостью, веб-фреймворк MVC более высокого уровня в Jakarta EE (JSF ) по-прежнему явно использует технологию сервлетов для запроса низкого уровня. / обработка ответа через FacesServlet . Несколько более старое использование - использование сервлетов в сочетании с JSP в шаблоне под названием «Модель 2 », который является разновидностью модель – представление – контроллер.

Текущая версия сервлета 4.0.

История

Java Servlet API был впервые публично анонсирован на первой конференции JavaOne в мае 1996 года. Примерно через два месяца после анонсов на конференции, был первый общедоступная реализация была размещена на веб-сайте JavaSoft. Это была первая альфа-версия веб-сервера Java (JWS; тогда известная под кодовым именем Jeeves), который в конечном итоге будет выпущен как продукт 5 июня 1997 года.

В его блоге на java.net, ветеран Sun и GlassFish, руководитель Джим Дрисколл подробно описывает историю технологии сервлетов. Джеймс Гослинг впервые подумал о сервлетах в первые дни Java, но эта концепция не стала продуктом до декабря 1996 года, когда Sun поставила JWS. Это было до того, как то, что сейчас называется Jakarta EE, было преобразовано в спецификацию.

Спецификация Servlet1 была создана Павни Диванджи, когда она работала в Sun Microsystems, с версией 1.0, завершенной в июне 1997 года. Начиная с версии 2.2, спецификация разрабатывалась под Java Процесс сообщества.

История API сервлетов
Версия API сервлетовВыпущенаСпецификацияПлатформаВажные изменения
Jakarta Servlet 5.0. 0 M112 июня 2020 г.5.0 Jakarta EE 9API перемещен из пакета javax.servletв jakarta.servlet
Jakarta Servlet 4.0.313 августа 2019 г.4.0 Jakarta EE 8Переименован с товарного знака "Java"
Java Servlet 4.0Сентябрь 2017 г.JSR 369 Java EE 8HTTP / 2
Java Servlet 3.1Май 2013 г.JSR 340 Java EE 7Неблокирующий ввод-вывод, механизм обновления протокола HTTP (WebSocket )
Java Servlet 3.0декабрь 2009 г. JSR 315 Java EE 6, Java SE 6Возможность подключения, Простота разработки, Асинхронный сервлет, Безопасность, File Upl oading
Java Servlet 2.5сентябрь 2005 г. JSR 154Java EE 5, Java SE 5Требуется Java SE 5, поддерживает аннотации
Java Servlet 2.4ноябрь 2003 г. JSR 154 J2EE 1.4, J2SE 1.3web.xml использует схему XML
Java Servlet 2.3август 2001 г. JSR 53 J2EE 1.3, J2SE 1.2Добавление Filter
Java Servlet 2.2август 1999 JSR 902, JSR 903 J2EE 1.2, J2SE 1.2Становится частью J2EE, представлены независимые веб-приложения в файлах.war
Java Servlet 2.1ноябрь 1998 г. 2.1a UnspecifiedПервая официальная спецификация, добавлено RequestDispatcher, ServletContext
Java Servlet 2.0декабрь 1997 г.Н / ДJDK 1.1Часть апреля 1998 Java Servlet Development Kit 2.0
Java Servlet 1.0декабрь 1996Н / ДЧасть июнь 1997 г. Java Servlet Development Kit (JSDK) 1.0
Жизненный цикл сервлет

Три метода являются центральными для жизни цикл сервлета. Это init (), service ()и destroy (). Они реализуются каждым сервлетом и вызываются сервером в определенное время.

  • На этапе инициализации сервлета жизненного цикла веб-контейнер инициализирует экземпляр сервлета, вызывая метод init(), передавая объект, реализующий javax.servlet.ServletConfig интерфейс. Этот объект конфигурации позволяет сервлету получать доступ к параметрам инициализации имя-значение из веб-приложения.
  • После инициализации экземпляр сервлета может обслуживать клиентские запросы. Каждый запрос обслуживается в отдельном потоке. Веб-контейнер вызывает метод сервлета service ()для каждого запроса. Метод service ()определяет тип выполняемого запроса и отправляет его соответствующему методу для обработки запроса. Разработчик сервлета должен предоставить реализацию для этих методов. Если запрос сделан для метода, который не реализован сервлетом, вызывается метод родительского класса, что обычно приводит к возврату ошибки запрашивающей стороне.
  • Наконец, веб-контейнер вызывает destroy (), который выводит сервлет из строя. Метод destroy (), как и init (), вызывается только один раз в жизненном цикле сервлета.

Ниже приведен типичный пользовательский сценарий этих методов.

  1. Предположим, что пользователь запрашивает посещение URL-адреса.
    • Затем браузер генерирует HTTP-запрос для этого URL-адреса.
    • Затем этот запрос отправляется на соответствующий сервер.
  2. HTTP запрос принимается веб-сервером и пересылается в контейнер сервлета.
    • Контейнер отображает этот запрос на конкретный сервлет.
    • Сервлет динамически извлекается и загружается в адресное пространство контейнера.
  3. Контейнер вызывает init ()метод сервлета.
    • Этот метод вызывается только тогда, когда сервлет сначала загружается в память.
    • Можно передать параметры инициализации сервлету, чтобы он мог настроить себя.
  4. Контейнер вызывает service ()метод сервлета.
    • Этот метод вызывается для обработки HTTP-запроса.
    • Сервлет может читать данные, которые были предоставлены в HTTP-запросе.
    • Сервлет также может формировать HTTP-ответ для клиента.
  5. Сервлет остается в адресном пространстве контейнера и доступен для обработки любых других HTTP-запросов, полученных от клиентов.
    • Метод service ()вызывается для каждого HTTP-запроса.
  6. В какой-то момент контейнер может решить выгрузить сервлет из своей памяти.
    • Алгоритмы, по которым принимается это решение, специфичны для каждого контейнера.
  7. Контейнер вызывает метод сервлета destroy (), чтобы освободить любые ресурсы, такие как дескрипторы файлов, которые выделены для сервлет; важные данные могут быть сохранены в постоянном хранилище.
  8. Память, выделенная для сервлета и его объектов, может быть затем собрана мусором.
Пример

В следующем примере сервлет печатает, сколько раз его Был вызван метод service ().

Обратите внимание, что HttpServletявляется подклассом GenericServlet, реализация интерфейса Servlet.

Метод service ()класса HttpServletотправляет запросы к методам doGet (), doPost (), doPut (), doDelete ()и так далее; согласно HTTP-запросу. В приведенном ниже примере service ()переопределяется и не различает, какой метод HTTP-запроса он обслуживает.

импорт java.io.IOException; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; открытый класс ServletLifeCycleExample расширяет HttpServlet {private Integer sharedCounter; @Override public void init (окончательная конфигурация ServletConfig) выбрасывает исключение ServletException {super.init (config); getServletContext (). log ("вызывается init ()"); sharedCounter = 0; } @Override защищенная недействительная служба (последний запрос HttpServletRequest, окончательный ответ HttpServletResponse) выдает исключение ServletException, IOException {getServletContext (). Log ("service () called"); int localCounter; синхронизированный (sharedCounter) {sharedCounter ++; localCounter = sharedCounter; } response.getWriter (). write ("Увеличение счетчика до" + localCounter); // доступ к локальной переменной} @Override public void destroy () {getServletContext (). log ("destroy () called"); }}
Серверы-контейнеры

Спецификация технологии сервлетов реализована во многих продуктах. См. Список реализаций на странице веб-контейнера.

Ссылки
Внешние ссылки
Последняя правка сделана 2021-05-24 12:20:50
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте