Рубрики
Без рубрики

Учебник по сервлетам – Java

Учебник по сервлетам. Учебник по сервлетам Java для начинающих. CGI против сервлета. Пример Проекта Входа в Сервлет. Иерархия Сервлетов. Сервлет 3 Аннотации, Атрибуты

Автор оригинала: Pankaj Kumar.

Добро пожаловать в учебник по сервлетам Java. В предыдущей статье мы узнали о веб-приложении Java и рассмотрели основные концепции веб-приложений, таких как Веб-сервер , Веб-клиент , HTTP и HTML , Веб-контейнер и как мы можем использовать Сервлеты и JSP для создания веб-приложения. Мы также создали наш первый сервлет и веб-приложение JSP и запустили его на сервере tomcat.

Учебник по сервлетам

Учебник по сервлету направлен на предоставление более подробной информации о сервлете java, основных интерфейсах в API сервлета Java, аннотациях сервлета 3.0, жизненном цикле сервлета, и в конце мы создадим простое приложение для примера сервлета входа.

  1. Учебник по сервлетам – Обзор
  2. Общий интерфейс шлюза (CGI)
  3. CGI против сервлета
  4. Иерархия API сервлетов
    1. Интерфейс Сервлета
    2. Интерфейс ServletConfig
    3. Интерфейс ServletContext
    4. Интерфейс ServletRequest
    5. Интерфейс ответа сервлету
    6. Интерфейс диспетчера запросов
    7. Класс GenericServlet
    8. Класс HttpServlet
  5. Атрибуты Сервлета
  6. Аннотации в сервлете 3
  7. Пример входа в сервлет Java
  1. Учебник по сервлетам – Обзор

    Сервлет-это управляемая сервером Java EE технология для создания веб-приложений на java. Пакеты javax.servlet и javax.servlet.http предоставляют интерфейсы и классы для написания наших собственных сервлетов.

    Все сервлеты должны реализовывать javax.сервлет.Интерфейс Servlet , который определяет методы жизненного цикла сервлета. При реализации универсальной службы мы можем расширить класс GenericServlet , предоставляемый API сервлетов Java. Класс HttpServlet предоставляет методы, такие как doGet() и doPost() , для обработки служб, специфичных для HTTP.

    В большинстве случаев доступ к веб-приложениям осуществляется по протоколу HTTP, и именно поэтому мы в основном расширяем класс HttpServlet.

  2. Общий интерфейс шлюза (CGI)

    До внедрения Java Servlet API технология CGI использовалась для создания динамических веб – приложений. Технология CGI имеет множество недостатков, таких как создание отдельного процесса для каждого запроса, код, зависящий от платформы (C, C++), высокое использование памяти и низкая производительность.

  3. CGI против сервлета

    Технология сервлетов Java была внедрена для преодоления недостатков технологии CGI.

    • Сервлеты обеспечивают лучшую производительность, чем CGI, с точки зрения времени обработки, использования памяти, поскольку сервлеты используют преимущества многопоточности, и для каждого запроса создается новый поток, что быстрее, чем загрузка, создание нового объекта для каждого запроса с помощью CGI.
    • Сервлеты и независимо от платформы и системы, веб-приложение, разработанное с помощью сервлета, может быть запущено на любом стандартном веб-контейнере, таком как серверы Tomcat, JBoss, Glassfish, а также в операционных системах, таких как Windows, Linux, Unix, Solaris, Mac и т.д.
    • Сервлеты надежны, потому что контейнер заботится о жизненном цикле сервлета, и нам не нужно беспокоиться об утечках памяти, безопасности, сборе мусора и т.д.
    • Сервлеты можно обслуживать, а кривая обучения невелика, потому что все, о чем нам нужно позаботиться, – это бизнес-логика для нашего приложения.
  4. Иерархия API сервлетов

    javax.сервлет.Сервлет является базовым интерфейсом API сервлета. Существуют некоторые другие интерфейсы и классы, о которых мы должны знать при работе с сервлетами. Также в спецификациях Servlet 3.0 API servlet ввел использование аннотаций, а не всю конфигурацию сервлета в дескрипторе развертывания. В этом разделе мы рассмотрим важные интерфейсы API сервлетов, классы и аннотации, которые мы будем использовать в дальнейшем при разработке нашего приложения. На приведенной ниже диаграмме показана иерархия API сервлетов.

    1. Интерфейс Сервлета

      javax.сервлет.Сервлет является базовым интерфейсом Java Servlet API . Интерфейс сервлета объявляет методы жизненного цикла сервлета. Для реализации этого интерфейса требуются все классы сервлетов. Методы, объявленные в этом интерфейсе, являются:

      1. public abstract void init(ServletConfig paramServletConfig) вызывает исключение ServletException – Это очень важный метод, который вызывается контейнером сервлета для инициализации параметров сервлета и ServletConfig. Сервлет не готов обрабатывать запрос клиента до тех пор, пока метод init() не завершит выполнение. Этот метод вызывается только один раз в жизненном цикле сервлета и делает класс сервлета отличным от обычных объектов java. Мы можем расширить этот метод в наших классах сервлетов для инициализации ресурсов, таких как подключение к БД, подключение к сокету и т.д.
      2. общедоступный абстрактный ServletConfig getServletConfig() – Этот метод возвращает объект конфигурации сервлета, который содержит любые параметры инициализации и конфигурацию запуска для этого сервлета. Мы можем использовать этот метод для получения параметров инициализации сервлета, определенных в дескрипторе развертывания (web.xml) или через аннотацию в сервлете 3. Позже мы рассмотрим интерфейс ServletConfig.
      3. общедоступная абстрактная служба аннулирования(ServletRequest req, ServletResponse res) вызывает исключение ServletException, исключение IOException – Этот метод отвечает за обработку запроса клиента. Всякий раз, когда контейнер сервлета получает какой-либо запрос, он создает новый поток и выполняет метод service () , передавая запрос и ответ в качестве аргумента. Сервлеты обычно выполняются в многопоточной среде, поэтому разработчик несет ответственность за обеспечение потокобезопасности общих ресурсов с помощью синхронизации .
      4. общедоступная абстрактная строка getServletInfo() – Этот метод возвращает строку, содержащую информацию о сервлете, такую как его автор, версия и авторские права. Возвращаемая строка должна быть обычным текстом и не может содержать наценок.
      5. public abstract void destroy() – Этот метод можно вызвать только один раз в жизненном цикле сервлета и использовать для закрытия любых открытых ресурсов. Это похоже на метод finalize класса java.
    2. Интерфейс ServletConfig

      javax.сервлет.ServletConfig используется для передачи информации о конфигурации сервлету. Каждый сервлет имеет свой собственный объект ServletConfig, и контейнер сервлета отвечает за создание экземпляра этого объекта. Мы можем предоставить параметры инициализации сервлета в web.xml файл или с помощью WebInitParam аннотации. Мы можем использовать метод getServletConfig() для получения объекта ServletConfig сервлета.

      Важными методами интерфейса ServletConfig являются:

      1. общедоступный абстрактный ServletContext getServletContext() – Этот метод возвращает объект ServletContext для сервлета. Мы рассмотрим интерфейс ServletContext в следующем разделе.
      2. публичное абстрактное перечисление<Строка> getInitParameterNames() – Этот метод возвращает перечисление<Строка> имени параметров инициализации, определенных для сервлета. Если параметры инициализации не определены, этот метод возвращает пустое перечисление.
      3. общедоступная абстрактная строка getInitParameter(строка paramString) – Этот метод можно использовать для получения определенного значения параметра инициализации по имени. Если параметр отсутствует с именем, он возвращает значение null.
    3. Интерфейс ServletContext

      javax.сервлет.Интерфейс ServletContext предоставляет сервлету доступ к переменным веб-приложения. ServletContext является уникальным объектом и доступен для всех сервлетов в веб-приложении. Если мы хотим, чтобы некоторые параметры инициализации были доступны нескольким или всем сервлетам в веб-приложении, мы можем использовать объект ServletContext и определить параметры в web.xml используя <контекст-параметр> элемент. Мы можем получить объект ServletContext с помощью метода getServletContext() ServletConfig. Механизмы сервлетов также могут предоставлять объекты контекста, уникальные для группы сервлетов и привязанные к определенной части пространства имен URL-адресов хоста.

      Некоторые из важных методов ServletContext являются:

      1. общедоступный абстрактный ServletContext getContext(строка uripath) – Этот метод возвращает объект ServletContext для определенного uripath или null, если он недоступен или не виден сервлету.
      2. общедоступный абстрактный URL-адрес getResource(путь к строке) вызывает исключение MalformedURLException – Этот метод возвращает объект URL, позволяющий получить доступ к любому запрошенному ресурсу содержимого. Мы можем получить доступ к элементам, независимо от того, находятся ли они в локальной файловой системе, удаленной файловой системе, базе данных или на удаленном сетевом сайте, не зная конкретных деталей того, как получить ресурсы.
      3. общедоступный абстрактный входной поток getResourceAsStream(строковый путь) – Этот метод возвращает входной поток по заданному пути к ресурсу или нулю, если он не найден.
      4. общедоступный абстрактный RequestDispatcher getRequestDispatcher(строковый url – путь) – Этот метод в основном используется для получения ссылки на другой сервлет. После получения RequestDispatcher программист сервлета перенаправляет запрос целевому компоненту или включает в него содержимое.
      5. публичный абстрактный пустой журнал(строка msg) – Этот метод используется для записи заданной строки сообщения в файл журнала сервлета.
      6. общедоступный абстрактный объект getAttribute(имя строки) – Возвращает атрибут объекта для данного имени. Мы можем получить перечисление всех атрибутов, используя общедоступное абстрактное перечисление<Строка> getAttributeNames() метод.
      7. атрибут public abstract void setAttribute(строка paramString, объект paramObject) – Этот метод используется для задания атрибута с областью применения. Атрибут будет доступен всем другим сервлетам, имеющим доступ к этому ServletContext. Мы можем удалить атрибут, используя public abstract void removeAttribute(строка paramString) метод.
      8. Строка getInitParameter(имя строки) – Этот метод возвращает строковое значение для параметра init, определенного с именем в web.xml, возвращает значение null, если имя параметра не существует. Мы можем использовать Перечисление<Строка> getInitParameterNames() для получения перечисления всех имен параметров инициализации.
      9. логический параметр setInitParameter(Строка paramString1, Строка paramString2) – Мы можем использовать этот метод для задания параметров инициализации приложения.

      Примечание : В идеале имя этого интерфейса должно быть ApplicationContext, потому что оно предназначено для приложения и не относится к какому-либо сервлету. Также не путайте его с контекстом сервлета, переданным в URL-адресе для доступа к веб-приложению.

    4. Интерфейс ServletRequest

      Интерфейс ServletRequest используется для предоставления информации о запросе клиента сервлету. Контейнер сервлета создает объект ServletRequest из запроса клиента и передает его методу servlet service() для обработки.

      Некоторые из важных методов интерфейса ServletRequest являются:

      1. Объект getAttribute(имя строки) – Этот метод возвращает значение именованного атрибута как объект и значение null, если его нет. Мы можем использовать метод getAttributeNames() для получения перечисления имен атрибутов для запроса. Этот интерфейс также предоставляет методы для установки и удаления атрибутов.
      2. String getParameter(имя строки) – Этот метод возвращает параметр запроса в виде строки. Мы можем использовать метод getParameterNames() для получения перечисления имен параметров для запроса.
      3. Строка getServerName() – возвращает имя хоста сервера.
      4. int getServerPort() – возвращает номер порта сервера, на котором он прослушивается.

      Дочерний интерфейс ServletRequest является HttpServletRequest , который содержит некоторые другие методы управления сеансами, файлы cookie и авторизацию запроса.

    5. Интерфейс ответа сервлету

      Интерфейс ServletResponse используется сервлетом при отправке ответа клиенту. Контейнер сервлета создает объект ServletResponse и передает его методу servlet service (), а затем использует объект response для создания HTML-ответа для клиента.

      Некоторые из важных методов в HttpServletResponse являются:

      1. аннулировать addCookie(Cookie cookie) – Используется для добавления cookie в ответ.
      2. void AddHeader(имя строки, строковое значение) – используется для добавления заголовка ответа с заданным именем и значением.
      3. Кодировка строк(java.lang.Строковый URL) – кодирует указанный URL-адрес, включая в него идентификатор сеанса, или, если кодировка не требуется, возвращает URL-адрес без изменений.
      4. Заголовок строки(имя строки) – возвращает значение для указанного заголовка или значение null, если этот заголовок не был задан.
      5. void sendRedirect(расположение строки) – используется для отправки временного ответа на перенаправление клиенту с использованием указанного URL-адреса расположения перенаправления.
      6. void setStatus(int sc) – используется для установки кода состояния для ответа.
    6. Интерфейс диспетчера запросов

      Интерфейс RequestDispatcher используется для пересылки запроса на другой ресурс, который может быть HTML, JSP или другим сервлетом в том же контексте. Мы также можем использовать это для включения содержимого другого ресурса в ответ. Этот интерфейс используется для связи сервлетов в том же контексте.

      В этом интерфейсе определены два метода:

      1. недействительная пересылка(запрос ServletRequest, ответ ServletResponse) – перенаправляет запрос от сервлета на другой ресурс (сервлет, файл JSP или файл HTML) на сервере.
      2. void включает(запрос ServletRequest, ответ ServletResponse) – включает содержимое ресурса (сервлета, страницы JSP, HTML-файла) в ответ.

      Мы можем получить RequestDispatcher в сервлете, используя ServletContext getRequestDispatcher(путь к строке) метод. Путь должен начинаться с/и интерпретироваться как относительно текущего корневого контекста.

    7. Класс GenericServlet

      GenericServlet-это абстрактный класс , реализующий сервлет, ServletConfig и сериализуемый интерфейс. GenericServlet обеспечивает реализацию по умолчанию всех методов жизненного цикла сервлета и методов ServletConfig и облегчает нашу жизнь.Когда мы расширяем этот класс, нам нужно переопределить только те методы, которые мы хотим, а с остальными мы можем работать с реализацией по умолчанию. Большинство методов, определенных в этом классе, предназначены только для легкого доступа к общим методам, определенным в интерфейсах Servlet и ServletConfig.

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

    8. Класс HttpServlet

      HttpServlet-это абстрактный класс, который расширяет GenericServlet и обеспечивает основу для создания веб-приложений на основе HTTP. Существуют методы, определенные для переопределения подклассами для различных методов HTTP.

      1. сделайте Get(), для запросов HTTP GET
      2. doPost(), для запросов HTTP POST
      3. doPut(), для HTTP-запросов PUT
      4. doDelete(), для HTTP-запросов на УДАЛЕНИЕ
  5. Атрибуты Сервлета

    Атрибуты сервлета используются для взаимодействия между сервлетами, мы можем устанавливать, получать и удалять атрибуты в веб-приложении. Существует три области для атрибутов сервлета – область запроса , область сеанса и область приложения .

    ServletRequest , HttpSession и ServletContext интерфейсы предоставляют методы для получения/установки/удаления атрибутов из запроса, сеанса и области применения соответственно.

    Атрибуты сервлета отличаются от параметров инициализации, определенных в web.xml для ServletConfig или ServletContext.

  6. Аннотации в сервлете 3

    До сервлета 3 все отображение сервлета и его параметры инициализации использовались для определения в web.xml, это было неудобно и более подвержено ошибкам, когда в приложении огромное количество сервлетов.

    Сервлет 3 представил использование аннотаций java для определения сервлета, фильтра и прослушивателя сервлетов и параметров инициализации.

    Некоторые из важных аннотаций сервлета являются:

    1. WebServlet – Мы можем использовать эту аннотацию с классами сервлетов для определения параметров инициализации, значения loadOnStartup, описания и шаблонов URL и т.д. По крайней мере один шаблон URL-адреса ДОЛЖЕН быть объявлен либо в атрибуте value, либо в атрибуте urlPattern аннотации, но не в обоих. Класс, в котором объявлена эта аннотация, ДОЛЖЕН расширять HttpServlet.
    2. WebInitParam – Эта аннотация используется для определения параметров инициализации для сервлета или фильтра, она содержит имя, пару значений, а также мы можем предоставить описание. Эту аннотацию можно использовать в веб-фильтре или аннотации веб-сервлета.
    3. WebFilter – Эта аннотация используется для объявления фильтра сервлета. Эта аннотация обрабатывается контейнером во время развертывания, класс фильтра, в котором она найдена, будет создан в соответствии с конфигурацией и применен к шаблонам URL, сервлетам и типам диспетчеризации. Аннотированный класс ДОЛЖЕН реализовывать javax.servlet.Интерфейс фильтра.
    4. WebListener – Аннотация, используемая для объявления прослушивателя для различных типов событий в данном контексте веб-приложения.

    Примечание: Мы рассмотрим фильтры и прослушиватели сервлетов в будущих статьях, в этой статье мы сосредоточимся на изучении базовых интерфейсов и классов API сервлетов.

  7. Пример входа в сервлет Java

    Теперь мы готовы создать наш пример сервлета входа в систему, в этом примере я буду использовать простой HTML, JSP и сервлет, который будет проверять подлинность учетных данных пользователя. Мы также увидим использование параметров инициализации ServletContext, атрибутов, параметров инициализации ServletConfig и функции RequestDispatcher, включая() и использование функции sendRedirect ().

    Наш окончательный Динамический веб-проект будет выглядеть так, как показано на рисунке ниже. Я использую Eclipse и Tomcat для приложения, процесс создания динамического веб-проекта представлен в Веб-приложениях Java учебник.

    Вот наша HTML-страница входа в систему, мы поместим ее в список файлов приветствия в web.xml так что, когда мы запустим приложение, оно откроет страницу входа в систему.

    Если вход в систему будет успешным, пользователю будет представлена новая страница JSP с сообщением об успешном входе в систему. Код страницы JSP выглядит так, как показано ниже.

    Вот это web.xml файл дескриптора развертывания, в котором мы определили параметры инициализации servletcontext и страницу приветствия.

    Вот наш последний класс сервлета для аутентификации учетных данных пользователя, обратите внимание на использование аннотаций для конфигурации сервлета и параметров инициализации ServletConfig.

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

Это все для руководства по сервлетам для начинающих, в следующем уроке мы рассмотрим Управление сеансами, фильтры сервлетов и прослушиватели.

Обновление: Ознакомьтесь со следующей статьей в серии, Управление сеансами в Java .