Что такое сервлет Java? Обработка запросов для веб-приложений Java

Что такое сервлет Java? Обработка запросов для веб-приложений Java

Обработка запросов — это основа основ разработки веб-приложений Java. Чтобы отвечать на запросы из сети, веб-приложение Java сначала должно определить, какой код будет отвечать на URL-адрес запроса, а затем перенаправлять ответ. У каждого стека технологий есть способ выполнения обработки запроса-ответа. В Java для этой цели используется сервлеты.

ПО как слои

Каждый уровень в программной системе содержит определенные возможности, которые требуются для слоев над ним. В качестве примера, аппаратный уровень находится ниже уровня прошивки, поддерживая его функциональность. Аналогично, для запуска операционной системы необходим уровень прошивки (BIOS на ПК или EFI на Mac). На рисунке 1 показаны эти три компонента на многоуровневой диаграмме.

jw servlet fig1

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

Серверная Java-версия

Серверное Java-приложение является одним из широкого класса приложений, которые служат в качестве конечных точек сети, получая HTTP-запросы с заданного URL-адреса и отправляя обратно данные в формате обмена, например HMTL или JSON. Серверное приложение Java состоит из стандартизированных Java-серверов и технологий для взаимодействия с этими серверами. Java Servlet API — это стандарт, используемый для взаимодействия с сервером Java.

Серверы Java и JVM

В Java-системах операционная система (ОС) содержит JVM, которая обеспечивает согласованную среду для работы приложений Java. Сервер Java находится поверх JVM. Подобно тому, как JVM является посредником между ОС и вашим Java-приложением, сервер Java обеспечивает последовательный, упрощенный доступ к возможностям сети и обработки операционной системы. Java-приложение запускается внутри сервера, используя API-интерфейс (Java Servlet) для доступа к возможностям сервера.

На рисунке 2 показан стек программного обеспечения для серверной Java.

jw servlet fig2

Спецификация Java Servlet

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

Для практического понимания того, как работает спецификация сервлета, рассмотрите статью, которую вы сейчас читаете. Где-то в недрах инфраструктуры KVERNER эта статья была отформатирована и представлена для публикации. Ему был присвоен URL-адрес, маршрутизированный по сети и прибывший на сервер. Сервер связал артефакт (статью) с URL-адресом и определил, что, когда запрос GET прибыл для этого URL-адреса, он вернул бы эту статью в HTML.

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

Чтобы создать сервлет, вы реализуете интерфейс Servlet и развертываете его внутри контейнера сервлета. На рисунке 3 показано, как ваше приложение использует сервлет.

jw servlet fig3

Написание сервлетов с Tomcat

Теперь, когда у вас есть концептуальный обзор, давайте приступим к работе над написанием сервлета Java.

Первое, что вам понадобится, это контейнер сервлетов, иначе известный как сервер приложений Java. Tomcat и Jetty — два из самых популярных контейнеров сервлетов. Мы будем использовать Tomcat, потому что это один из самых давних серверов приложений для Java. Tomcat является бесплатным.

Загрузите и установите Tomcat

Если у вас еще нет Tomcat, начните с открытия страницы загрузки Tomcat. Там вы можете выбрать либо установщик Windows, либо самую подходящую ZIP-версию для вашего компьютера.

Вот и все: вы только что добавили серверный уровень Java в свою операционную систему!

Проверить, работает ли Tomcat

Прежде чем идти дальше, давайте убедимся, что вы можете запустить Tomcat. Либо запустите службу Windows, либо запустите файл startup.sh или startup.bat из командной строки.

Теперь, когда Вы откроете веб-браузер и перейдете на localhost: 8080, вас следует приветствовать на следующем экране:

jw servlet fig4

Запустите пример сервлета Tomcat

Теперь давайте посмотрим на сервлет Java. Удобно, Tomcat включил некоторые простые примеры.

Нажмите ссылку «Examples», которую вы видите в разделе «Developer Quick Start» на странице приветствия Tomcat. После того, нажмите ссылку «Servlet Examples».

Теперь вы можете увидеть простой сервлет в действии, щелкнув на «Выполнить» — Hello World.

Просмотр исходного кода сервлета

Нажмите стрелку «Назад» в своем браузере, затем щелкните ссылку источника для приложения HelloWorld. Источник показан в листинге 1.

Листинг 1. Исходный код для примера Hello World

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Hello World!</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Hello World!</h1>");
out.println("</body>");
out.println("</html>");
}
}

 

Давайте рассмотрим этот код шаг за шагом.

Первая строка вызывает стандартный импорт Java. После этого программа определяет новый класс, который расширяет класс HttpServlet. Это важно, потому что сервлеты должны реализовывать интерфейс Servlet для запуска внутри контейнера сервлета.

Затем класс HelloWorld определяет метод, называемый doGet (). Это стандартный метод для сервлетов: он сообщает серверу направлять HTTP GET-запросы на этот метод. Другие HTTP-методы, такие как POST, обрабатываются аналогично называемыми методами, такими как doPost.

Обратите внимание, что doGet () имеет два параметра: (запрос HttpServletRequest, ответ HttpServletResponse). Эти два объекта представляют собой запрос и ответ. Они обеспечивают доступ ко всему, что требуется вашему коду, чтобы справиться с запросом и выдать ответ. Например, в методе сервлетов HelloWorld.doGet объект ответа используется для информирования сервера о том, какой тип заголовка содержимого должен выдаваться. В этом случае это response.setContentType («text/html») ;.

Наконец, программа получает объект Java Writer из ответа response.getWriter (). Затем Writer используется для создания простого ответа HTML для возврата в браузер.

URL путь

Структура и поток кода в листинге 1 довольно интуитивно понятны, но есть вопиющее упущение. Как сервер знает, чтобы связать URL-адрес http://localhost:8080/examples/servlets/servlet/HelloWorldExample с методом HelloWorld.doGet?

Вы найдете ответ на эту тайну в метаданных приложения. Каждое веб-приложение Java включает в себя стандартный файл метаданных, называемый web.xml, который сообщает серверу, как сопоставлять URL-адреса сервлетам.

В примерах приложений Tomcat — WEB.xml находится в \apache-tomcat-9.0.11\webapps\examples\WEB-INF\web.xml.\WEB-INF\web.xml — это стандартное расположение файла метаданных для сервлетов. Если вы откроете этот файл, вы увидите, как настроен сервер.

Сокращенный web.xml в листинге 2 содержит только ту информацию, которая нам нужна для нашего обсуждения.

Листинг 2. Исходный код для примера Tomcat — Hello World

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="true">
<!-- ...CODE REMOVED FOR BREVITY... -->
<servlet>
<servlet-name>HelloWorldExample</servlet-name>
<servlet-class>HelloWorldExample</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorldExample</servlet-name>
<url-pattern>/servlets/servlet/HelloWorldExample</url-pattern>
</servlet-mapping>
<!-- ...CODE REMOVED FOR BREVITY... -->
</web-app>

В листинге 2 показан типичный заголовок XML-файла, ссылающийся на схему дескриптора веб-приложения Java. За этим следуют две записи: <servlet> и <servlet-mapping>.

Вызов <servlet> назначает логическое имя HelloWorldExample классу HelloWorldExample через поля <servlet-name> и <servlet-class>.

Вызов <servlet-mapping> присваивает этому логическому имени значение <url-pattern>, тем самым связывая код с URL-адресом.

Другие возможности сервлета

Помимо сопоставления URL-адресов сервлеты предоставляют дополнительные возможности для фильтрации и аутентификации. Фильтры используются для обработки запросов, а аутентификация используется для назначения простых пользователей и ролей. Спецификация JavaServer Pages (JSP) обеспечивает поддержку для генерации HTML гораздо более мощным способом.

Заключение

Эта статья была концептуальным обзором сервлетов Java, включая обработку URL-адресов и обработку ответов внутри Java-сервера. Понимание этих основных элементов серверной Java-технологии поможет вам интегрировать более продвинутые концепции, такие как перенаправление серверов и отображение времени выполнения URL-адресов, которые являются новыми в Servlet 4.0.

Добавить комментарий

Ваш адрес email не будет опубликован.