Jump to content

Джакартский сервлет

Оригинальный автор(ы) Павни Диванджи
Разработчик(и) Фонд Затмения
Первоначальный выпуск декабрь 1996 г .; 27 лет назад ( 1996-12 )
Стабильная версия
6.0 / 31 мая 2022 г .; 2 года назад ( 31 мая 2022 )
Репозиторий
Написано в Ява
Платформа Джакарта, EE
Размер 2,56 МБ
Тип Программный компонент для веб-API
Лицензия Публичная лицензия Eclipse
Веб-сайт Джакарта .из /спецификации /сервлет /
Жизнь JSP файла

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

Введение

[ редактировать ]

Джакартский сервлет — это класс Java. [1] в Jakarta EE , который соответствует API сервлетов Jakarta, [2] стандарт реализации классов Java, отвечающих на запросы. Сервлеты в принципе могут взаимодействовать по любому протоколу клиент-сервер , но чаще всего они используются с HTTP . В принципе, любые сервлеты могут расширять GenericServlet сорт; однако, если говорить реалистично, все сервлеты расширяют возможности HttpServlet сорт. [3] Таким образом, «сервлет» часто используется как сокращение от «HTTP-сервлет». [4] Таким образом, сервлет можно использовать для добавления динамического контента на веб-сервер с помощью платформы Java . [5] Сгенерированный контент обычно представляет собой HTML , но может представлять собой и другие данные, например XML и, чаще, JSON .

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

А Servlet — это объект , который получает запрос и генерирует ответ на основе этого запроса. Основной Servlet Пакет определяет объекты Java для представления запросов и ответов сервлета, а также объекты для отражения параметров конфигурации сервлета и среды выполнения.

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

Пакет javax.servlet.http определяет HTTP -специфичные подклассы GenericServlet. Этот пакет включает объекты управления сеансами, которые отслеживают многочисленные запросы и ответы между веб-сервером и клиентом.

Сервлеты могут поддерживать состояние переменных сеанса во многих серверных транзакциях с помощью файлов cookie HTTP или сопоставления URL-адресов . [6] Существует несколько способов создания сервлета и использования сопоставления URL-адресов с сервлетом. До спецификации сервлета 3.0 (Tomcat 7.0) настройка web.xml для сопоставления сервлета с URL-адресом была единственным вариантом. Для приложений, использующих спецификацию сервлета 3.0 или более поздней версии, @WebServlet аннотацию можно использовать для сопоставления любого сервлета с одним или несколькими шаблонами URL-адресов.

Сервлеты могут быть упакованы в файл WAR как веб-приложение . [7]

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

Сервлеты могут генерироваться автоматически из Jakarta Server Pages (JSP) компилятором Jakarta Server Pages . Разница между сервлетами и JSP заключается в том, что сервлеты обычно встраивают HTML в код Java, а JSP встраивают код Java в HTML. В общем, при использовании JSP встраивание кода Java в JSP считается плохой практикой. [8] Вместо этого лучшим подходом было бы переместить внутреннюю логику из JSP в код Java в Servlet. [8] Это гарантирует, что Servlet отвечает только за обработку, а JSP отвечает только за представление HTML, [8] обеспечивая четкое разделение задач и соблюдение принципа единой ответственности .

Хотя прямое использование сервлетов для генерации HTML (как показано в примере ниже) стало редким, веб-инфраструктура MVC более высокого уровня в Jakarta EE ( Faces ) по-прежнему явно использует технологию сервлетов для низкоуровневой обработки запросов/ответов через FacesServlet.

Несколько более старый вариант использования — использование сервлетов в сочетании с JSP в шаблоне под названием « Модель 2 », который является разновидностью модели-представления-контроллера .

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

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

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

История API сервлетов
Версия API сервлета Выпущенный Спецификация Платформа Важные изменения
Джакартский сервлет 6.0 31 мая 2022 г. 6.0 Джакарта EE 10 удалить устаревшие функции и реализовать запрошенные улучшения
Джакартский сервлет 5.0 9 октября 2020 г. 5.0 Джакарта ЭЭ 9 API перенесен из пакета javax.servlet к jakarta.servlet
Джакартский сервлет 4.0.3 10 сентября 2019 г. 4.0 Джакарта EE 8 Торговая марка переименована из «Java».
Java-сервлет 4.0 Сентябрь 2017 г. ДжСР 369 Ява ЕЕ 8 HTTP/2
Java-сервлет 3.1 май 2013 г. ДжСР 340 Ява ЕЕ 7 Неблокирующий ввод-вывод, механизм обновления протокола HTTP ( WebSocket ) [19]
Java-сервлет 3.0 декабрь 2009 г. ДжСР 315 Ява ЕЕ 6, Ява ЮВ 6 Возможность подключения, простота разработки, асинхронный сервлет, безопасность, загрузка файлов
Java-сервлет 2.5 сентябрь 2005 г. ДжСР 154 Java EE 5, Java SE 5 Требуется Java SE 5, поддерживает аннотации.
Java-сервлет 2.4 ноябрь 2003 г. ДжСР 154 J2EE 1.4, J2SE 1.3 web.xml использует схему XML
Java-сервлет 2.3 август 2001 г. ДжСР 53 J2EE 1.3, J2SE 1.2 Добавление Filter
Java-сервлет 2.2 август 1999 г. ДжСР 902 , ДжСР 903 J2EE 1.2, J2SE 1.2 Становится частью J2EE, представлены независимые веб-приложения в файлах .war.
Java-сервлет 2.1 ноябрь 1998 г. 2.1а Не указано Добавлена ​​первая официальная спецификация RequestDispatcher, ServletContext
Java-сервлет 2.0 декабрь 1997 г. JDK 1.1 Часть пакета разработки Java Servlet Development Kit 2.0, апрель 1998 г. [20]
Java-сервлет 1.0 декабрь 1996 г. Часть пакета разработки Java Servlet Development Kit (JSDK) 1.0, июнь 1997 г. [14]

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

[ редактировать ]

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

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

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

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

Следующий пример сервлета выводит, сколько раз service() был вызван метод.

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

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

import java.io.IOException;

import jakarta.servlet.ServletConfig;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

public class ServletLifeCycleExample extends HttpServlet {
    private Integer sharedCounter;

    @Override
    public void init(final ServletConfig config) throws ServletException {
        super.init(config);
        getServletContext().log("init() called");
        sharedCounter = 0;
    }

    @Override
    protected void service(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException {
        getServletContext().log("service() called");
        int localCounter;
        synchronized (sharedCounter) {
            sharedCounter++;
            localCounter = sharedCounter;
        }
        response.getWriter().write("Incrementing the count to " + localCounter);  // accessing a local variable
        response.getWriter().flush();   // flush response
    }

    @Override
    public void destroy() {
        getServletContext().log("destroy() called");
    }
}

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

[ редактировать ]

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

Существуют также другие типы контейнеров сервлетов, например, для SIP-сервлетов, например SailFin .

См. также

[ редактировать ]
  1. ^ Перейти обратно: а б Murach & Urban 2014 , стр. 170–171, §2 Основные навыки работы с сервлетами и JSP — Перспектива — Резюме.
  2. ^ «Сервлет (API спецификации Java(TM) EE 7)» . oracle.com . Проверено 25 июля 2018 г.
  3. ^ Murach & Urban 2014 , стр. 128–129, §2 Основные навыки работы с сервлетами и JSP — Как создать и сопоставить сервлет.
  4. ^ Перейти обратно: а б «Основы сервлетов — глава 1» . novocode.com . Архивировано из оригинала 18 декабря 2017 г.
  5. ^ Murach & Urban 2014 , стр. 40–42, §1. Начало работы правильно — сервлет для внутренней обработки.
  6. ^ Мурач и Урбан 2014 , с. 87, §2 Основные навыки работы с сервлетами и JSP.
  7. ^ Мурач и Урбан 2014 , с. 74, §1 Начало работы правильно – Другие навыки работы с веб-приложениями.
  8. ^ Перейти обратно: а б с Murach & Urban 2014 , стр. 46–47, §1. Начните правильно — JSP для второй страницы.
  9. ^ Фридман, Мэтт (26 июня 1996 г.). «Отчет о конференции JavaOne» . JavaWorld . Архивировано из оригинала 26 июля 2018 г. Проверено 25 июля 2018 г.
  10. ^ Диванджи, Павани; Коннелли, Дэйв; Вагл, Прасад (29 мая 1996 г.). «Java-сервер и сервлеты» (PDF) . Серверы и серверные расширения . JavaOne 1996. Архивировано (PDF) из оригинала 16 августа 2000 г. Проверено 01 февраля 2020 г.
  11. ^ Чанг, Фил Индже (1 июля 1997 г.). «Интервью: команда Java Web Server дает вам возможность похудеть» . JavaWorld . Архивировано из оригинала 26 июля 2018 г. Проверено 25 июля 2018 г.
  12. ^ Чанг, Фил Индже (1 июня 1997 г.). «Веб-сервер Java поставляется!» . JavaWorld . Архивировано из оригинала 26 июля 2018 г. Проверено 25 июля 2018 г.
  13. ^ «История сервлетов | Community.oracle.com» . Веблоги.java.net. 10 декабря 2005 г. Архивировано из оригинала 15 августа 2020 г. Проверено 14 июня 2013 г.
  14. ^ Перейти обратно: а б Хантер, Джейсон (март 2000 г.). «Временная шкала сервлетов» . За пределами программирования сервлетов на Java . Конференция О'Рейли по Java. О'Рейли Медиа . [ постоянная мертвая ссылка ]
  15. ^ «Веб-сервер Java» . Явасофт . Сан Микросистемс . Архивировано из оригинала 11 января 1998 г. Проверено 01 февраля 2020 г.
  16. ^ «Веб-сервер Java(tm)» . Сан Микросистемс . Архивировано из оригинала 6 февраля 2002 г. Проверено 01 февраля 2020 г.
  17. ^ «Павни Диванджи» . Институт семейной онлайн-безопасности . Архивировано из оригинала 26 июля 2018 года . Проверено 12 ноября 2016 г.
  18. ^ патент США 5928323 , Гослинг, Джеймс А .; Диванджи, Павни и Коннелли, Дэвид В., «Устройство и метод для динамического генерирования информации с помощью серверных программных объектов», опубликовано 27 июля 1999 г., выпущено 27 июля 1999 г., передано Sun Microsystems.  
  19. ^ «Что нового в Servlet 3.1? - Развитие Java EE 7 (Арун Гупта, Осталось миль...)» . oracle.com . Проверено 22 ноября 2016 г.
  20. ^ Кроуфорд, Уильям; Хантер, Джейсон (ноябрь 1998 г.). "Предисловие". Программирование сервлетов на Java (1-е изд.). О'Рейли Медиа . п. ix–x. ISBN  978-1-56592-391-1 . Мы рассматриваем версию 2.0 API сервлетов, которая была представлена ​​как часть Java Web Server 1.1 в декабре 1997 года и уточнена выпуском Java Servlet Development Kit 2.0 в апреле 1998 года.
  21. ^ Murach & Urban 2014 , стр. 160–163, §15 Как разработать сервлет — дополнительные навыки работы с сервлетами.
  • Мурач, Джоэл; Урбан, Майкл (2014). Java-сервлеты и JSP Мураха . ISBN  978-1-890774-78-3 .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 1a7373c48bff382dd1dc2e651637fc13__1721195520
URL1:https://arc.ask3.ru/arc/aa/1a/13/1a7373c48bff382dd1dc2e651637fc13.html
Заголовок, (Title) документа по адресу, URL1:
Jakarta Servlet - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)