Servlet

Java

Взаимоотношение клиент-сервер

Клиент запрашивает некоторое действие, а сервер выполняет действие и посылает ответ клиенту.
Код простого Web-приложение на Servlet

Пакеты

javax.servlet и javax.servlet.http - классы и интерфейсы для функционирования сервлетов.
javax.servlet.jsp и javax.servlet.jap.tagext - классы и интерфейсы которые, которые расширяют возможности сервлета для взаимодействия со страницами JavaServer Pages.

Maven

<dependency>
 <groupId>javax.servlet</groupId>
 <artifactId>servlet-api</artifactId>
 <version>2.5</version>
</dependency>

Дополнительно

Рекомендации по использованию UTF-8

Интерфейс Servlet

Все сервлеты должны реализовывать интерфейс javax.servlet.Servlet.

Метод Описание
void init(ServletConfig config) Этот метод автоматически вызывается один раз при выполнении сервлета для его инициализации. Параметр ServletConfig предоставляеться контейнером сервлетов, который исполняет сервлет.
ServletlConfig getServletConfig() Этот метод возвращает ссылку на объект, который реализует интерфейс ServletConfit. Этот объект предоставляет доступ к информации о конфигурации сервлета, такой как параметры инициализации сервлета и объекта контекста сервлета ServletContext, который дает доступ к сервлету и его окружению(т.е. контейнеру сервлетов,в котором исполняется сервлет).
String getServletInfo() Этот метод определяется программистом, создающим сервлет, для возврата строки, содержащей информацию о сервлете. Такую как данные об авторе сервлета и номере версии сервлета.
void service(SeerviceRequest request, ServletResponse respinse) Контейнер сервлета вызывает этот метод для ответа на клиентский запрос сервлету.
void destroy() Этот "чистящий" метод вызывается после завершения выполнения сервлета контейнером сервлетов. Данный метод следует применять для освобождения ресурсов, используемые сервлетов, таких как открытые файлы или открытые соединения с базами данных.

Пакеты сервлетов определяют два абстрактных класса, которые реализуют интерфейс Servlet:
javax.servlet.GenericServlet
jacax.servlet.http.HttpServlet - сервлеты, работающие с клиентами через Web, обычно расширяют этот класс

Абстрактный класс HttpServlet

javax.servlet.http.HttpServlet
Переопределен и реализован метод service, который вызывает методы в зависимости от типа запроса.
В классе определенны методы: doGet, doPost, doDelete, doOptions, doPut, doTrace. В качестве параметров принимают HttpServletReuest, HttpServletResponse.

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
 
public class SimpleServlet extends HttpServlet
{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
    {
        //задаём MIME-тип содержимого дынных, которые будут посылаться в качестве ответа.
        //список MIME-типов  http://htmlbook.ru/html/value/mime
        resp.setContentType("text/html");
        resp.setCharacterEncoding("UTF-8");
 
        //получаем ссылку на объект PrintWriter, которая даёт возможность сервлету отправлять содержимое клиенту.
        try (PrintWriter out = resp.getWriter())
        {
            //переедаем HTML страницу
            out.print("<!DOCTYPE html>\n" +
                    "<html>\n" +
                    "<body>\n" +
                    "\n" +
                    "<h1>Мой первый Servlet</h1>\n" +
                    "\n" +
                    "<p>Добро пожаловать в Servlet</p>\n" +
                    "\n" +
                    "</body>\n" +
                    "</html>");
        }
    }
}

Интерфейс HttpservletRequest

javax.servlet.http.HttpServletRequest
Web-сервер, который исполняет сервлет, создает объект HttpServlerRequest и передает его методу service сервлета. Этот объект содержит запрос, поступивший от клиента.

Метод Описание
String getParamenter(String name) Возвращает значение, ассоциированное с параметром, отправленным сервлету как часть запроса get или post. Параметр name представляет собой имя параметра.
Enumeration getParameterNames() Возвращает имена всех параметров, отправленных сервлету как часть запроса post
String [] getParameterValues(String name) Для параметра с несколькими значениями этот метод возвращает строковый массив содержащий значения указанного параметра.
Cookie[] getCookies() Возвращает массив объектов Coolie, сохраненных на клиенте сервером. Cookie могут быть использованы для уникальной идентификации клиентов сервером.
HttpSession getSession(boolean create) Возвращает объект HttpSession, ассоциированный с текущим сеансом клиента. С помощью этого метода может быть создан объект HttSession, если объект для клиента еще не существует. Объекты HttSession могут использоваться аналогично Cookie для уникальной идентификации клиентов.

Интерфейс HttpServlerResponse

javax.servlet.http.HttpServletResponse
Web-сервер, который исполняет сервлет, создает объект HttpServletResponse и передает его методу service сервлета. Этот объект содержи ответ клиенту.

Метод Описание
void addCookie(Coolie cookie) Используется для добавления Cookie в заголовок ответа клиенту. Установленный максимальный возраст Cookie а также то , разрешено ли клиентам хранение Cookie определяют, будут ли Cookie сохранены на клиенте.
ServletOutputStream getOutputStream() Получает бинарный поток вывода, позволяющий отправлять бинарные данные клиенту.
PtintWriter getWriter () Получает символьный поток вывода, позволяющий отправлять текстовые данные клиенту.
void setContentType(String type) Задает MIME-тип ответа браузеру. MIME-тип помогает браузеру определить , как отображать данные. Например, MIME-тип "tesxt/html" указывает, что ответ является HTML-документом, поэтому браузер отображает HTML-страницу

Дескриптор развертывания (web.xml)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
          http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
           version="2.5">
 
    <!--Общее описание вашего Web-приложения-->
    <!--display-name - имя которое может быть отображено администратору сервера-->
    <display-name>
           Показывает построение простого веб-приложения на основе сервлетов.
    </display-name>
 
    <!--Определение сервлета-->
    <servlet>
        <!--Имя которое мы выбрали для этого конкретного сервлета-->
        <servlet-name>simpleServlet</servlet-name>
 
        <!--Задаёт полное имя класса сервлета-->
        <servlet-class>
            SimpleServlet
        </servlet-class>
    </servlet>
 
    <!--Задание карты сервлета-->
    <!--Шаблон URL помогает серверу определять, какие запросы посылаются сервлету.-->
    <servlet-mapping>
        <servlet-name>simpleServlet</servlet-name>
        <url-pattern>welcome1</url-pattern>
    </servlet-mapping>
</web-app>

Структура каталогов Web-приложения

Структура каталогов Web-приложения состоит из корня контекста - каталога верхнего уровня для всего Web-приложения - и нескольких подкаталогов.

Каталог Описание
Корень контекста Это корневой каталог для Web-приложения. Имя этого каталога выбирается разработчиком Web-приложения. Все JSP-страницы, HTML-документы, сервлеты и вспомогательные файлы, такие как изображения и файлы классов, размещаются в этом каталоге или в его подкаталогах. Имя этого каталога задается создателем Web-приложения. Чтобы задать структуру в Web-приложении, подкаталоги могут быть помещены в корень контекста. Например, если приложение использует много изображений, можно поместить в этот каталог подкаталог изображений.
WEB_INF Этот каталог содержит дескриптор развертывания (web.xml) Web-приложения
WEB_INF/classes Этот каталог содержит файлы классов сервлета и другие файлы классов поддержки, используемые в Web-приложении. Если классы являются частью пакета, здесь должна присутствовать полная структура каталогов пакета.
WEB_INF/lib Этот каталог содержит файлы архивов Java (JAR). JAR-файлы могут содержать файлы классов сервлета и другие файлы классов поддержки, используемые в Web-приложении.
Пока не указано иное, содержимое этой страницы распространяется по лицензии Creative Commons Attribution-ShareAlike 3.0 License