Для начала работы с Servlet достаточно прочитать эту статью

Java

Официальная учетная запись «Заметки по программированию на Java» записывает повседневную жизнь изучения JAVA, делясь каждым кусочком обучения в дороге, от входа до отказа, добро пожаловать на внимание

image.png

что такое сервлет

Официальное объяснение: сервлет — это программа, работающая на веб-сервере или сервере приложений, которая действует как промежуточный уровень между запросами от веб-браузера или другого HTTP-клиента и базой данных или приложением на HTTP-сервере.

С точки зрения непрофессионала, сервлет — это программа, работающая на сервере приложений, таком как веб-сервер, такой как tomcat и jetty.Он может отвечать на запрос протокола http, реализовывать собственную логику пользователя и, наконец, возвращать результат пользователю. клиент (браузер)

Как реализовать сервлет

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

Создать проект

Здесь мы берем IDEA (Professional Edition) в качестве примера.

  1. File -> new -> Project

在这里插入图片描述

  1. Выберите Java в левом столбце и выберите свой собственный jdk в правом Project SDK. Если нет, вам нужно добавить следующее самостоятельно. Вам нужно отметить веб-приложение в поле, указывающем, что мы создаем проект сервлета.

在这里插入图片描述

  1. затем заполните имя проекта, местоположение проекта, затем завершите

Пока проект создан, созданный по умолчанию каталог — src, который используется для хранения нашего java-кода, web — для хранения некоторых ресурсов о сети, в Интернете есть WEB-INF и сгенерированный по умолчанию index.jsp, Каталог WEB-INF Ниже приведен файл web.xml

在这里插入图片描述

Скачать Томкэт

доступtomcat.apache.org/download-90…, загрузите tomcat9, загрузите соответствующий файл в соответствии с вашей собственной системой

在这里插入图片描述После загрузки разархивируйте его и подождите, пока не будет использована следующая конфигурация.

Настройка Tomcat в IDEA

Нажмите Добавить конфигурацию

在这里插入图片描述

Выберите + -> Сервер Tomcat -> Локальный

  • ① Настройте локальный кот и настройте загруженный выше кот
  • ② Откройте браузер после запуска по умолчанию.
  • ③ Адрес для открытия браузера после запуска по умолчанию
  • ④ Установите параметры запуска ВМ
  • ⑤ Установите JDK, используемый Tomcat
  • ⑥ Установите имя, отображаемое Tomcat

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

在这里插入图片描述

После переключения на «Развертывание» щелкните знак «+» справа, выберите «Артефакт», чтобы добавить военный пакет текущего проекта, или нажмите «Исправить» ниже, чтобы добавить военный пакет.

在这里插入图片描述

После добавления военного пакета появитсяApplication contextКонфигурация пути используется для настройки имени пути текущего проекта, которое является именем проекта в каталоге веб-приложений, когда мы говорили о Tomcat, Все запросы сервлета в рамках этого проекта должны выполняться по этому пути, например, моя конфигурация выше, последующий запросlocalhost:8080/servlet_demo_war_exploded/*, вы должны добавить /servlet_demo_war_exploded для доступа к текущему проекту

Написать сервлет

Наконец-то мы подошли к нашей теме, напишем программу сервлета, согласно спецификации сервлета нам нужно ввести jar-пакет servlet-api, затем унаследовать класс HttpServlet и переписать соответствующие методы doGet и doPost.

Пакет servlet-api находится в каталоге lib, куда мы скачали и распаковали tomcat.

在这里插入图片描述

Создайте новый каталог lib в веб-каталоге, скопируйте servlet-api.jar во вновь созданный каталог lib, щелкните правой кнопкой мыши servlet-api.jar, нажмите «Добавить как библиотеку...», «ОК».

在这里插入图片描述

在这里插入图片描述

Создайте новый DemoServlet в каталоге src, унаследуйте javax.servlet.http.HttpServlet и перепишите методы doGet и doPost.

 PrintWriter writer = resp.getWriter();
 PrintWriter writer = resp.getWriter();
 writer.print("this is servlet html");
 writer.flush();
 writer.close();

Измените файл web/WEB-INF/web.xml и добавьте элемент конфигурации Servlet.

 <servlet>
        <servlet-name>demoServlet</servlet-name> //定义servletname
        <servlet-class >com.muku.servlet.DemoServlet</servlet-class> //上面继承HttpServlet的class
    </servlet>

    <servlet-mapping>
        <servlet-name>demoServlet</servlet-name> //上面servlet-name
        <url-pattern>/*</url-pattern> //表示拦截所有请求
    </servlet-mapping>
servlet 	定义一个Servlet
    servlet-name 为servlet命名
    servlet-class 我们自己实现的servletclass类
 
servlet-mapping 定义servlet与请求的映射关系
    url-pattern 配置拦截的请求路径,比如 /html/1 /html/2 ,/*表示拦截所有请求
    servlet-name url-pattern中定义的拦截请求路径,由哪个servlet来处理

Общий измененный скриншот выглядит следующим образом

在这里插入图片描述

在这里插入图片描述

Запустите наш настроенный tomcat. После успешного запуска IDEA автоматически откроет браузер и получит доступ к заданному нами пути. Если нет случайностей, вы можете увидеть,this is servlet html 在这里插入图片描述

До сих пор сервлет был успешно написан и к нему можно получить доступ

Сервлет на основе аннотаций

Чтобы написать сервлет выше, нам нужно изменить web.xml и унаследовать класс HttpServlet для реализации сервлета.После Servlet3.0 предоставляется метод на основе аннотаций для реализации разработки сервлета.

@WebServlet(name = "annotation",urlPatterns = "/*")
public class AnnotationServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter writer = resp.getWriter();
        writer.print("this is servlet html");
        writer.flush();
        writer.close();
    }
}

Просто добавьте аннотацию WebServlet прямо поверх нашего класса реализации.

Аннотация WebServlet в основном имеет следующие важные атрибуты.

  • имя указывает имя текущего сервлета, соответствующее имени сервлета в предыдущем файле wem.xml.
  • urlPatterns представляет сопоставление пути запроса, обрабатываемое текущим сервлетом.
  • initParams представляет конфигурацию инициализации сервлета.

Несколько важных объектов в сервлете

HttpServletRequest

Всякий раз, когда есть HTTP-запрос, информация о текущем HTTP-запросе будет инкапсулирована в объект HttpServletRequest и передана в качестве входных параметров через методы doGet, doPost и другие. HttpServletRequest имеет следующие общие методы.

  • getHeader Получить информацию о заголовке заголовка запроса
  • getCookies Получить информацию о файлах cookie текущего запроса
  • getMethod Получить текущую категорию метода запроса Получить сообщение
  • getQueryString Получить строку kv текущего параметра запроса k1=v1=&k2=v2
  • getRequestURI Получить текущий путь запроса /servlet/a
  • getRequestURL Получить общий путь текущего запроса, включая соглашение о доменном имениhttp://localhost:8080/servlet/a
  • getSession Получить информацию о сеансе текущего запроса
  • getParameter Получить значение соответствующего ключа в параметре запроса

HttpServletResponse

Всякий раз, когда приходит http-запрос, информация, возвращаемая текущим http, будет инкапсулирована как объект HttpServletResponse. Мы можем вернуть соответствующие данные, установив атрибут ответа. HttpServletRequest имеет следующие общие методы.

  • addCookie добавляет файл cookie, вы можете установить файл cookie для текущего http-запроса, и он будет перенесен в следующем запросе.
  • sendRedirect перенаправляет на указанный адрес запроса, код будет установлен на 302
  • addHeader устанавливает возвращаемые данные заголовка
  • setStatus устанавливает соответствующий код состояния, общие коды состояния включают 200 302 405 500 и т. д.
  • setContentType устанавливает формат соответствующих данных, таких как text/html, text/javascript, text/css, application/json и т. д., браузер будет отображать соответствующие данные в соответствии с contentType.
  • getWriter — важный метод для получения объекта выходного потока.Вы можете использовать метод записи для вывода контента на страницу, например, это сервлет html, написанный выше

ServletConfig

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

  • getServletName Получить текущее имя сервлета
  • getServletContext получает объект ServletContext, каждое веб-приложение имеет один и только один объект ServletContext,
  • getInitParameter Получить информацию о параметрах конфигурации инициализации сервлета
  • getInitParameterNames Получить набор имен всей информации о конфигурации инициализации сервлета

ServletContext

Веб-приложение создает объект ServletContext при запуске, который представляет контекст веб-приложения и может использоваться для настройки и чтения глобальной конфигурации текущего приложения.Сервлет взаимодействует между сервлетами через объект servletContext, который может быть полученный через объект servletConfig.

  • get/set Набор атрибутов для получения глобальных атрибутов сервлета
  • getAttributeNames Получить коллекцию имен всех атрибутов
  • addServlet Добавить сервлет
  • addFilter добавить фильтр
  • addListener добавить слушателя

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

Разработка жизненного цикла сервлета для сервлета от создания до уничтожения, в основном включает следующие процессы

  • Вызовите метод init для инициализации
  • Вызовите метод службы для обработки запроса и вызовите соответствующий метод doGet, doPost, doPut и другие методы в соответствии с методом запроса.
  • Вызовите метод destroy для уничтожения

Init

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

Service

Сервисный метод является важным методом при обработке HTTP-запросов. Всякий раз, когда приходит новый http-запрос, сервер генерирует новый поток для обработки запроса, а затем обрабатывает его с помощью сервисного метода. Сервис будет обрабатывать запрос в соответствии с методом текущего запроса.Введите вызов doGet, doPost и других методов, эти методы будут переписаны нами, поэтому каждый запрос фактически обрабатывается нашей переписанной логикой

destroy

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