WikiSort.ru - Программирование

ПОИСК ПО САЙТУ | о проекте

Сервлет является интерфейсом Java, реализация которого расширяет функциональные возможности сервера. Сервлет взаимодействует с клиентами посредством принципа запрос-ответ.

Хотя сервлеты могут обслуживать любые запросы, они обычно используются для расширения веб-серверов. Для таких приложений технология Java Servlet определяет HTTP-специфичные сервлет классы.

Пакеты javax.servlet и javax.servlet.http обеспечивают интерфейсы и классы для создания сервлетов.

Первая спецификация сервлетов была создана в Sun Microsystems (версия 1.0 была закончена в июне 1997). Начиная с версии 2.3, спецификация сервлетов разрабатывалась под руководством Java Community Process. Стандарт JSR 53 определял как Servlet 2.3, так и спецификацию JavaServer Page 1.2. JSR 154 включает в себя спецификации Servlet 2.4 и 2.5. Текущая спецификация на 13 июня 2013 года — Servlet 3.1 (описана в JSR-340).

Хронология Servlet API

Хронология Servlet API
Servlet API версияРелизПлатформаВажнейшие изменения
Servlet 4.0 Сентябрь 2017 JavaEE 8 HTTP/2, Server Push
Servlet 3.1Май 2013  (англ.)JavaEE 7, JavaSE 7Неблокирующий ввод-вывод, поддержка нестандартных протоколов поверх HTTP
Servlet 3.0Декабрь 2009JavaEE 6, JavaSE 6Pluggability, простота разработки, асинхронные сервлеты, безопасность, загрузка файлов
Servlet 2.5Сентябрь 2005JavaEE 5 , J2SE 5.0Требует J2SE 5.0, поддержка аннотаций
Servlet 2.4Ноябрь 2003J2EE 1.4, J2SE 1.3web.xml использует XML Schema
Servlet 2.3Август 2001J2EE 1.3, J2SE 1.2Появление Filter
Servlet 2.2Август 1999J2EE 1.2, J2SE 1.2Становится частью J2EE, предлагает независимые веб-приложения в .war файлах
Servlet 2.1Ноябрь 1998не оговореноПервая официальная спецификация, добавлены RequestDispatcher, ServletContext
Servlet 2.0JDK 1.1Часть Java Servlet Development Kit 2.0
Servlet 1.0Июнь 1997

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

Жизненный цикл сервлета состоит из следующих шагов:

  1. В случае отсутствия сервлета в контейнере.
    1. Класс сервлета загружается контейнером.
    2. Контейнер создает экземпляр класса сервлета.
    3. Контейнер вызывает метод init(). Этот метод инициализирует сервлет и вызывается в первую очередь, до того, как сервлет сможет обслуживать запросы. За весь жизненный цикл метод init() вызывается только один раз.
  2. Обслуживание клиентского запроса. Каждый запрос обрабатывается в своем отдельном потоке. Контейнер вызывает метод service() для каждого запроса. Этот метод определяет тип пришедшего запроса и распределяет его в соответствующий этому типу метод для обработки запроса. Разработчик сервлета должен предоставить реализацию для этих методов. Если поступил запрос, метод для которого не реализован, вызывается метод родительского класса и обычно завершается возвращением ошибки инициатору запроса.
  3. В случае если контейнеру необходимо удалить сервлет, он вызывает метод destroy(), который снимает сервлет из эксплуатации. Подобно методу init(), этот метод тоже вызывается единожды за весь цикл сервлета.

Пример

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class NewServlet extends HttpServlet {
   
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        // Параметр
        String parameter = request.getParameter("parameter");

        // Старт HTTP сессии
        HttpSession session = request.getSession(true);
        session.setAttribute("parameter", parameter);

        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Заголовок</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Пример сервлета"+parameter+"</h1>");
            out.println("</body>");
            out.println("</html>");
        } finally {
            out.close();
        }
    } 

    @Override
    public String getServletInfo() {
        return "Пример сервлета";
    }

}

См. также

Серверы

Ссылки

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии