Сервлет Джакарта - Jakarta Servlet - Wikipedia

Сервлет Джакарта
Оригинальный автор (ы)Павни Диванджи
Разработчики)Фонд Затмения
изначальный выпускДекабрь 1996 г.; 24 года назад (1996-12)
Стабильный выпуск
5.0 / 7 сентября 2020 г.; 3 месяца назад (2020-09-07)
Репозиторий Отредактируйте это в Викиданных
Написано вЯва
ПлатформаДжакарта EE 9
Размер2,56 МБ
ТипПрограммный компонент за Веб-API
ЛицензияОбщественная лицензия Eclipse
Интернет сайтДжакарта.ee/технические характеристики/ сервлет/5.0/
Жизнь JSP файл

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

Вступление

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

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

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

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

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

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

Текущая версия Servlet - 4.0.[3]

История

API сервлетов Java был впервые публично объявлен на церемонии открытия. JavaOne конференция в мае 1996 г.[4][5] Примерно через два месяца после объявлений на конференции первая публичная реализация была размещена на веб-сайте JavaSoft. Это была первая альфа-версия веб-сервера Java (JWS; тогда известная под кодовым названием Дживс)[6] который в конечном итоге будет отправлен как продукт 5 июня 1997 года.[7]

В своем блоге на java.net, Ветеран Солнца и Стеклянная рыба Ведущий Джим Дрисколл подробно рассказывает об истории технологии сервлетов.[8] Джеймс Гослинг первая мысль о сервлетах в первые дни Ява, но концепция не стала продуктом до декабря 1996 года, когда Sun выпустила JWS.[9][10][11] Это было раньше, чем сейчас Джакарта EE был внесен в спецификацию.

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

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

Жизненный цикл сервлета

В жизненном цикле сервлета центральное место занимают три метода. Это в этом(), служба(), и разрушать()Они реализуются каждым сервлетом и вызываются сервером в определенное время.

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

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

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

Пример

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

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

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

импорт java.io.IOException;импорт javax.servlet.ServletConfig;импорт javax.servlet.ServletException;импорт javax.servlet.http.HttpServlet;импорт javax.servlet.http.HttpServletRequest;импорт javax.servlet.http.HttpServletResponse;общественный учебный класс ServletLifeCycleExample расширяет HttpServlet {    частный Целое число sharedCounter;    @Override    общественный пустота в этом(окончательный ServletConfig config) бросает ServletException {        супер.в этом(config);        getServletContext().бревно("init () называется");        sharedCounter = 0;    }    @Override    защищенный пустота служба(окончательный HttpServletRequest запрос, окончательный HttpServletResponse отклик) бросает ServletException, IOException {        getServletContext().бревно("служба () называется");        int localCounter;        синхронизированный (sharedCounter) {              sharedCounter++;              localCounter = sharedCounter;        }        отклик.getWriter().записывать("Увеличение счетчика до" + localCounter);  // доступ к локальной переменной    }    @Override    общественный пустота разрушать() {        getServletContext().бревно("destroy () называется");    }}

Контейнерные серверы

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

Рекомендации

  1. ^ "Сервлет (API спецификации Java (TM) EE 7)". oracle.com. Получено 2018-07-25.
  2. ^ а б «Основы сервлетов - Глава 1». novocode.com. Архивировано из оригинал на 2017-12-18.
  3. ^ https://jcp.org/en/jsr/detail?id=369
  4. ^ Фридман, Мэтт (26 июня 1996 г.). «Отчет о конференции JavaOne». JavaWorld.
  5. ^ Диванджи, Павани; Коннелли, Дэйв; Вагл, Прасад (29 мая 1996 г.). «Сервер Java и сервлеты». Серверы и серверные расширения (PDF). JavaOne 1996. В архиве (PDF) из оригинала 16.08.2000. Получено 2020-02-01.
  6. ^ Чанг, Фил Индже (1 июля 1997 г.). «Интервью: команда Java Web Server дает вам тонкие». JavaWorld. Получено 2018-07-25.
  7. ^ Чанг, Фил Индже (1 июня 1997 г.). "Java Web Server поставляется!". JavaWorld. Получено 2018-07-25.
  8. ^ "История сервлетов | community.oracle.com". Weblogs.java.net. 2005-12-10. Получено 2013-06-14.
  9. ^ а б Хантер, Джейсон (март 2000 г.). «Хронология сервлета». За пределами программирования сервлетов Java. Конференция О'Рейли по Java. O'Reilly Media.
  10. ^ "Веб-сервер Java". Javasoft. Sun Microsystems. В архиве из оригинала 1998-01-11. Получено 2020-02-01.
  11. ^ "Веб-сервер Java (tm)". Sun Microsystems. В архиве из оригинала от 06.02.2002. Получено 2020-02-01.
  12. ^ "Павни Диванджи". Институт семейной онлайн-безопасности. Получено 12 ноября 2016.
  13. ^ Патент США 5928323, Гослинг, Джеймс А.; Павни Диванджи и Дэвид В. Коннелли, "Устройство и метод для динамического генерирования информации с помощью программных объектов на стороне сервера", опубликовано 27 июля 1999 г., опубликовано 27 июля 1999 г. Sun Microsystems 
  14. ^ «Что нового в Servlet 3.1? - Java EE 7 движется вперед (Арун Гупта, осталось еще много миль ...)». oracle.com. Получено 22 ноября 2016.
  15. ^ Кроуфорд, Уильям; Хантер, Джейсон (ноябрь 1998 г.). "Предисловие". Программирование сервлетов Java (1-е изд.). O'Reilly Media. п. ix – x. ISBN  978-1-56592-391-1. Мы рассматриваем версию 2.0 API сервлетов, которая была представлена ​​как часть Java Web Server 1.1 в декабре 1997 года и прояснилась выпуском Java Servlet Development Kit 2.0 в апреле 1998 года.

внешняя ссылка