Джава – распространенный язык программирования. Он относится к объектно-ориентированным. Обладает общим назначением. Это значит, что при помощи Java можно писать самые разные утилиты – от мелких «офисных» программ до сложных игр и веб-серверных приложений.
Инструментарий Java относительно богат. Он включает в себя разнообразные библиотеки и фреймворки на все случаи жизни. Отлично совмещается со всеми операционными системы и годится для кроссплатформенной разработки.
Довольно важной частью Джавы являются сервлеты. Именно о них зайдет речь далее в статье. Соответствующий элемент пригодится тем, кто планирует посвятить работу веб-серверной разработке и браузерному контенту.
Несколько слов о Джаве
Джава – удобный и практичный высокоуровневый язык программирования. Необходимую информацию по нему «с нуля» можно отыскать не только среди официальной документации, но и просто в Сети. Там полно обучающих видео, по которым удастся быстро освоить нюансы Java.
Использовать соответствующий язык очень удобно. Он обладает следующими нюансами:
- наличие собственной среды разработки;
- кроссплатформенность;
- простота применения;
- универсальность;
- достойный уровень безопасности;
- совместимость с разными базами данных;
- поддержка клиент-серверной разработки;
- богатый функционал и инструментарий;
- хорошо читаемый код;
- понятный даже новичку синтаксис.
Java задействован в случае необходимости создания программного обеспечения, работающего через интернет. Входит в состав большинства популярных движков, что делает этот ЯП максимально удобным и практичным.
Сервлет – понятие
Сервлет (servlet) – это интерфейс Java, использование которого будет расширять функциональные возможности имеющегося сервера. Взаимодействует с клиентами путем использования методы «запросы и ответы».
Servlet – это специализированные приложения, работающие на веб-сервере или сервере приложений. Действуют в качестве промежуточного уровня между запросами, которые поступают из браузера или HTTP-клиента, а также базами данных или софтом на HTTP-сервере.
Использования
Servlet позволяет:
- собирать информацию от пользователей через специализированные формы веб-страничек;
- представлять записи из БД или иного источника;
- создавать веб-странички динамическим способом.
Servlets часто заменяют программное обеспечение, реализованное через CGI. Только у сервлетов есть несколько непревзойденных преимуществ перед соответствующими интерфейсами.
Сильные стороны – почему сервлеты полезны
Если сравнивать CGI-утилиты и сервлеты, то у вторых есть ряд плюсов, которые делают «технологию» предельно полезной:
- высокий уровень производительности;
- выполнение servlet непосредственно в адресном пространстве веб-сервера – не нужно создавать отдельный процесс, чтобы обработать запрос каждого клиента;
- независимость от используемой платформы, благодаря написанию оных на Java;
- диспетчер безопасности предлагает надежную защиту servlet;
- наличие полной функциональности библиотек классов Джавы.
Стоит обратить внимание на то, что данная «технология» выделяется быстродействием. Она не будет сильно «грузить» операционную систему и server при обработке запросов. Ответы системой выводятся в кратчайшие сроки.
Ключевые задачи
Servlet имеет определенный ряд задач, которые он будет выполнять. К таковым принято относить:
- чтение явной информации, которая отправляется браузерами (или clients);
- считывание неявно заданных электронных материалов HTTP-запроса;
- обработка и генерация результатов, включая обращения к базам данных;
- отправка явных данных (документации) интернет-обозревателям;
- формирование и отправка неявного HTTP-ответа браузеру.
Все это необходимо для качественной работы и стабильного функционирования клиент-серверной модели программного обеспечения совершенно разной сложности.
Жизненный цикл
Стоит обратить внимание на то, что весь жизненный цикл сервлета находится под управление контейнера сервлета. Оный задействует интерфейс javax.servlet.Servlet для того, чтобы понимать объекты сервлета, а также манипулирования оным.
Жизненный цикл соответствующей «технологии» проходит в несколько этапов. В основном их 4:
- старт;
- загрузка и инициализация;
- обработка запроса;
- конец.
Каждый этап предусматривает свои ключевые особенности:
- Старт – это загрузка. Сервер осуществляет запуск, контейнер развертывается, после чего происходит загрузка всех сервлетов.
- Инициализация. Здесь servlet инициализируется через вызов метода init(). Метод Servler.init() вызывается контейнеров Servlet для того, чтобы уведомить о том, что соответствующий экземпляр Servlet успешно создан. Оный готов для дальнейшего использования.
- Обработка запросов. Сервлет будет вызывать метод service() для того, чтобы обработать запрос клиента. Он вызывается для информирования сервлета о клиентских запросах.
- Уничтожение. Это – завершающий этап всей операции. Происходит за счет вызова destroy(). Этот метод будет запущен только один раз за все время существования servlet. Отвечает за сообщение о том, что экземпляр «технологии» заканчивается.
Стоит обратить внимание на то, что методы init() и destroy() за весь жизненный цикл будут вызываться только единожды. Сервлет – это своеобразный сборщик мусора JVM. Так завершается жизненный цикл servlet.
О создании – как реализовать
Первое, что нужно знать о рассматриваемой «технологии» — это ее основы и цикл жизни. Данная информация не самая трудная. Далее будут рассмотрены примеры и алгоритмы, которые пригодятся как новичкам, так и продвинутым разрабам.
Для создания servlet необходимо выполнить несколько шагов:
- Продумать и создать структуру каталогов.
- Написать саму «технологию» клиент-серверной модели.
- Провести компиляцию сервлета.
- Добавить сопоставления в документ под названием web.xml.
- Осуществить запуск сервера, а затем провести развертку подготовленного заранее проекта.
- Предоставить (получить) доступ к изучаемой «технологии».
Далее будут рассмотрены наглядные примеры, которые помогут понять принцип работы «методики».
Предварительная подготовка
Для того, чтобы справиться с поставленной задачей, предстоит провести небольшую предварительную подготовку. Особенно это касается тех, кто недавно начал работу на Джава.
В подготовку входит:
- Инициализация и настройка сервера Apache Tomcat.
- Если что-то пошло не так – переустановить Eclipse. Он входит в Tomcat.
- Для любой программы сервлета подготовить три Файла: index.html, файл классов Java, а также web.xml.
Для обучения навыкам работы с «технологией», представленной ранее вниманию, необходимо сначала создать веб-проект динамического характера. Приведенный далее пример предназначается для servlet, который помогает осуществить вход в систему. Процесс будет отображаться в качестве вывода в интернет-обозревателе.
Сначала требуется создать файл index.html:
Далее – осуществить кодирование файла класса Джавы. Итоговый код соответствующего документа выглядит так:
package Edureka;
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.HttpServletResp onse;
public class Login extends HttpServlet
{
protected void doPost(HttpServletRequest req,HttpServletResponse res)throws ServletException,IOException
PrintWriter pw=res.getWriter();
res.setContentType("text/html");
String user=req.getParameter("userName");
String pass=req.getParameter("userPassword");
pw.println("Login Success...!")
if(user.equals("edureka") pass.equals("edureka"))
pw.println("Login Success...!");
else
pw.println("Login Failed...!");
pw.close();
}
}
Приведенный выше код позволяет установить условия – если имя пользователя и пароль — это edureka, то появится сообщение об успешном входе в систему. В противном случае в авторизации будет отказано. После того, как написан файл Джава класса, нужно вписать сопоставление в web.xml.
Добавка сопоставления
Для этого требуется запомнить следующие данные:
- Документ web.xml будет находиться в папке WEB-INF рассматриваемой утилиты.
- При отсутствии такового можно кликнуть по дескриптору развертки и щелкнуть по надписи «Создать заглушку дескриптора развертывания».
- После подготовки web.xml потребуется прописать в оном сопоставления.
Выше – пример сопоставления.
Универсальный тип
Стоит обратить внимание на то, что есть независимый от протокола сервлет. Он носит название универсального. Предопределяет метод service(), необходимый для обработки клиентских запросов.
У service() есть два аргумента:
- Объект ServletRequest. Он отвечает за информирование сервлета о запросе, который совершает client.
- Элемент ServletResponse. За счет него осуществляется возврат ответа клиенту.
GenericServlet – это абстрактный класс. Имеет единственный метод service(). Когда происходит создание универсального servlet через расширение класса Generic, нужно предопределять ранее упомянутый метод.
Теперь можно посмотреть, как осуществляется вызов такого сервлета. Для этого необходимо провести кодирование трех документов.
HTML-файл
Здесь потребуется учесть следующее:
- Сначала необходимо создать файл HTML. Он будет отвечать за вызов сервлета.
- Чтобы описанная операция произошла, пользователь должен нажать на ссылку на веб-странице.
- Создавать документ требуется в папке WebContent. Путь к нему – это WebContent/ index.html.
Выше – код, который должен прописать программер в упомянутом ранее файле.
Файл класса
Следующий этап – это прописка универсального сервлета путем расширения класса Generic. Для этого нужно провести предопределение метода service(). Достаточно кликнуть ПКМ по папке src и создать новый файл класса, назвать его общим. Путь будет выглядеть так: Java Resources / src/ default package / generic.java.
Выше – то, как будет выглядеть необходимый для реализации задачи исходный код класса Джавы.
Создание Web
Обнаружить соответствующий файлик удастся по пути: WebContent / WEB-INF / web.xml. Там можно сопоставить servlet с конкретным URL-адресом. Рассматриваемый пример – это вызов странички приветствия. После клика по ссылке в index.html произойдет отображение приветствия в класс Servlet, который был создан ранее.
Остается запустить сервер Tomcat, а затем – активировать servlet. На экране получится желаемый результат. Предложенная информация – все, что нужно знать об универсальных сервлетах. Дальше речь зайдет о концепциях отслеживания сеансов. Это тоже весьма полезная информация, которая пригодится каждому разработчику клиент-серверной утилиты.
Отслеживание сеансов
Сессия означает определенный интервал времени. Отслеживание – это метод поддержки состояния (информации) пользователя. Понятие трактуется также как управление сеансом в пределах сервлета. Каждый раз, когда пользователь обращается к серверу, тот обрабатывает запрос в качестве нового.
Выше – пример того, как выглядит соответствующий процесс. Для распознавания конкретного юзера, требуется всегда проводить отслеживание сеансов.
О файлах cookie
Cookie – это небольшие фрагменты данных. Они сохраняются между несколькими клиентскими запросами. Имеет такой файл:
- значение;
- имя;
- дополнительные атрибуты вроде комментариев;
- путь;
- квалификаторы домена;
- номер версии.
Представлен методом отслеживания сеансов. По умолчанию каждый запрос им будет рассматриваться как новый. Теперь, когда принцип работы файла cookie усвоен, стоит просмотреть, как использовать оный.
Наглядный пример
Пусть будут даны два сервлета. Для них разные коды:
package Edureka;
import java.io.*;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
@WebServlet("/login")
public class MyServlet1 extends HttpServlet{
public void doGet(HttpServletRequest request,nbsp; HttpServletResponse resp onse) {
try{
response.setContentType("text/html");
PrintWriter pwriter = response.getWriter();
String name = request.getParameter("userName");
String password = request.getParameter("userPassword");
pwriter.print("Hello here:"+name);
pwriter.print(" Your Password is: "+password);
//Creating two cookies
Cookie c1=new Cookie("userName",name);
Cookie c2=new Cookie("userPassword",password);
//Adding the cookies to response header
response.addCookie(c1);
response.addCookie(c2);
pwriter.print("
<a href='welcomehere'>View Details</a>");
pwriter.close();
}catch(Exception exp){
System.out.println(exp);
}
}
}
Это – MyServlet1. Для второго документа актуальная кодификация:
Теперь необходимо:
- Создать HTML-форму для файлов cookie.
- Создать XML.
- Добавить в последний все сопоставления.
Можно запускать код и смотреть, что произошло. Именно так функционируют «куки».
Странички сервера Java
Стоит обратить внимание на JSP. Это = технология, которая применяется для веб-приложений. Напоминает сервлеты. Представлено расширением servlet, так как предоставляет больше функциональных возможностей. Страничка JSP включает в себя теги HTML, а также теги JSP. Их проще поддерживать, поэтому можно разделить проектирование и непосредственную разработку.
Сценарии
Когда стало понятно, что такое метод doget, а также examples в коде, можно рассмотреть сценарии. Они позволяют вставлять Джава-код в JSP. Есть несколько типов элементов сценариев:
- Скриптлета. Применяется для обработки и реализации исходного кода Java.
- Выражения. Он позволяет записывать кодификации в выходной поток ответа. Поэтому не нужно осуществлять запись out.print() для записи информации. В основном применяется для того, чтобы печатать значения переменных или методов.
- Объявление. Помогает объявлять поля и методы. Код, написанный внутри тега JSP, будет размещаться за пределами метода service() автоматически сгенерированного сервлета. Память оный при каждом обращении не получает.
Всего этого достаточно для того, чтобы вникнуть в основы сервлетов Java и клиент-серверных моделей. А для того, чтобы лучше понимать, что такое servlet-name servlet-class, example (в коде), а также JSP, стоит посетить дистанционные онлайн курсы. За короткий срок пользователя научат писать программы на Джаве, а также работать с клиент-серверными моделями. По завершении программы юзеру выдадут электронный сертификат, подтверждающий навыки в выбранном направлении.
<!DOCTYPE html>
<html dir="ltr" lang="ru-RU">
<head>
<meta charset="UTF-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="profile" href="http://gmpg.org/xfn/11" />
<title>Джава и сервлеты: что должен знать разработчик OTUS</title>
<!-- All in One SEO 4.5.2.1 - aioseo.com -->
<meta name="description" content="Джава – распространенный язык программирования. Он относится к объектно-ориентированным. Обладает общим назначением. Это значит, что при помощи Java можно писать самые разные утилиты – от мелких «офисных» программ до сложных игр и веб-серверных приложений. Инструментарий Java относительно богат. Он включает в себя разнообразные библиотеки и фреймворки на все случаи жизни. Отлично совмещается со всеми операционными" />
<meta name="robots" content="max-image-preview:large" />
<link rel="canonical" href="https://otus.ru/journal/dzhava-i-servlety-chto-dolzhen-znat-razrabotchik/" />
<meta name="generator" content="All in One SEO (AIOSEO) 4.5.2.1" />
<script type="application/ld+json" class="aioseo-schema">
{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/otus.ru\/journal\/dzhava-i-servlety-chto-dolzhen-znat-razrabotchik\/#article","name":"\u0414\u0436\u0430\u0432\u0430 \u0438 \u0441\u0435\u0440\u0432\u043b\u0435\u0442\u044b: \u0447\u0442\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u043d\u0430\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a OTUS","headline":"\u0414\u0436\u0430\u0432\u0430 \u0438 \u0441\u0435\u0440\u0432\u043b\u0435\u0442\u044b: \u0447\u0442\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u043d\u0430\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a","author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2022\/05\/oj-1080x720-20.png","width":1080,"height":720},"datePublished":"2022-05-05T20:57:11+00:00","dateModified":"2022-05-05T20:57:14+00:00","inLanguage":"ru-RU","mainEntityOfPage":{"@id":"https:\/\/otus.ru\/journal\/dzhava-i-servlety-chto-dolzhen-znat-razrabotchik\/#webpage"},"isPartOf":{"@id":"https:\/\/otus.ru\/journal\/dzhava-i-servlety-chto-dolzhen-znat-razrabotchik\/#webpage"},"articleSection":"\u041f\u043e\u043b\u0435\u0437\u043d\u043e\u0435, Java"},{"@type":"BreadcrumbList","@id":"https:\/\/otus.ru\/journal\/dzhava-i-servlety-chto-dolzhen-znat-razrabotchik\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/#listItem","position":1,"name":"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430","item":"https:\/\/otus.ru\/journal\/","nextItem":"https:\/\/otus.ru\/journal\/dzhava-i-servlety-chto-dolzhen-znat-razrabotchik\/#listItem"},{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/dzhava-i-servlety-chto-dolzhen-znat-razrabotchik\/#listItem","position":2,"name":"\u0414\u0436\u0430\u0432\u0430 \u0438 \u0441\u0435\u0440\u0432\u043b\u0435\u0442\u044b: \u0447\u0442\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u043d\u0430\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a","previousItem":"https:\/\/otus.ru\/journal\/#listItem"}]},{"@type":"Organization","@id":"https:\/\/otus.ru\/journal\/#organization","name":"\u041e\u0442\u0443\u0441 \u043e\u043d\u043b\u0430\u0439\u043d-\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435","url":"https:\/\/otus.ru\/journal\/","sameAs":["https:\/\/www.youtube.com\/channel\/UCetgtvy93o3i3CvyGXKFU3g"],"contactPoint":{"@type":"ContactPoint","telephone":"+74999389202","contactType":"Customer Support"}},{"@type":"Person","@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author","url":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/","name":"A. Pavlenko","image":{"@type":"ImageObject","@id":"https:\/\/otus.ru\/journal\/dzhava-i-servlety-chto-dolzhen-znat-razrabotchik\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/d4c499a104d7c2522fa41f89e6819499?s=96&d=mm&r=g","width":96,"height":96,"caption":"A. Pavlenko"}},{"@type":"WebPage","@id":"https:\/\/otus.ru\/journal\/dzhava-i-servlety-chto-dolzhen-znat-razrabotchik\/#webpage","url":"https:\/\/otus.ru\/journal\/dzhava-i-servlety-chto-dolzhen-znat-razrabotchik\/","name":"\u0414\u0436\u0430\u0432\u0430 \u0438 \u0441\u0435\u0440\u0432\u043b\u0435\u0442\u044b: \u0447\u0442\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u043d\u0430\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a OTUS","description":"\u0414\u0436\u0430\u0432\u0430 \u2013 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0439 \u044f\u0437\u044b\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041e\u043d \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c. \u041e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u043e\u0431\u0449\u0438\u043c \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Java \u043c\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0430\u043c\u044b\u0435 \u0440\u0430\u0437\u043d\u044b\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u2013 \u043e\u0442 \u043c\u0435\u043b\u043a\u0438\u0445 \u00ab\u043e\u0444\u0438\u0441\u043d\u044b\u0445\u00bb \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0434\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0438\u0433\u0440 \u0438 \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 Java \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u043e\u0433\u0430\u0442. \u041e\u043d \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438 \u043d\u0430 \u0432\u0441\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u0436\u0438\u0437\u043d\u0438. \u041e\u0442\u043b\u0438\u0447\u043d\u043e \u0441\u043e\u0432\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c\u0438","inLanguage":"ru-RU","isPartOf":{"@id":"https:\/\/otus.ru\/journal\/#website"},"breadcrumb":{"@id":"https:\/\/otus.ru\/journal\/dzhava-i-servlety-chto-dolzhen-znat-razrabotchik\/#breadcrumblist"},"author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"creator":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2022\/05\/oj-1080x720-20.png","@id":"https:\/\/otus.ru\/journal\/dzhava-i-servlety-chto-dolzhen-znat-razrabotchik\/#mainImage","width":1080,"height":720},"primaryImageOfPage":{"@id":"https:\/\/otus.ru\/journal\/dzhava-i-servlety-chto-dolzhen-znat-razrabotchik\/#mainImage"},"datePublished":"2022-05-05T20:57:11+00:00","dateModified":"2022-05-05T20:57:14+00:00"},{"@type":"WebSite","@id":"https:\/\/otus.ru\/journal\/#website","url":"https:\/\/otus.ru\/journal\/","name":"OTUS JOURNAL","description":"Blog about IT","inLanguage":"ru-RU","publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"}}]}
</script>
<!-- All in One SEO -->
<link rel='dns-prefetch' href='//otus.ru' />
<link rel='dns-prefetch' href='//fonts.googleapis.com' />
<link rel='stylesheet' id='wp-block-library-css' href='https://otus.ru/journal/wp-includes/css/dist/block-library/style.min.css?ver=6.4.7' type='text/css' media='all' />
<style id='classic-theme-styles-inline-css' type='text/css'>
/*! This file is auto-generated */
.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
</style>
<style id='global-styles-inline-css' type='text/css'>
body{--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}body .is-layout-flex{flex-wrap: wrap;align-items: center;}body .is-layout-flex > *{margin: 0;}body .is-layout-grid{display: grid;}body .is-layout-grid > *{margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
.wp-block-navigation a:where(:not(.wp-element-button)){color: inherit;}
:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}
:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}
.wp-block-pullquote{font-size: 1.5em;line-height: 1.6;}
</style>
<link rel='stylesheet' id='wbcr-comments-plus-url-span-css' href='https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/css/url-span.css?ver=2.2.0' type='text/css' media='all' />
<link rel='stylesheet' id='wpel-style-css' href='https://otus.ru/journal/wp-content/plugins/wp-external-links/public/css/wpel.css?ver=2.59' type='text/css' media='all' />
<link rel='stylesheet' id='ez-toc-css' href='https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/css/screen.min.css?ver=2.0.61' type='text/css' media='all' />
<style id='ez-toc-inline-css' type='text/css'>
div#ez-toc-container .ez-toc-title {font-size: 120%;}div#ez-toc-container .ez-toc-title {font-weight: 500;}div#ez-toc-container ul li {font-size: 95%;}div#ez-toc-container nav ul ul li {font-size: 90%;}
.ez-toc-container-direction {direction: ltr;}.ez-toc-counter ul{counter-reset: item ;}.ez-toc-counter nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }.ez-toc-widget-direction {direction: ltr;}.ez-toc-widget-container ul{counter-reset: item ;}.ez-toc-widget-container nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }
</style>
<link rel='stylesheet' id='contentberg-fonts-css' href='https://fonts.googleapis.com/css?family=Roboto%3A400%2C500%2C700%7CPT+Serif%3A400%2C400i%2C600%7CIBM+Plex+Serif%3A500' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-core-css' href='https://otus.ru/journal/wp-content/themes/contentberg/style.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-lightbox-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/lightbox.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='font-awesome-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/fontawesome/css/font-awesome.min.css?ver=1.8.3' type='text/css' media='all' />
<script type="text/javascript" id="breeze-prefetch-js-extra">
/* <![CDATA[ */
var breeze_prefetch = {"local_url":"https:\/\/otus.ru\/journal","ignore_remote_prefetch":"1","ignore_list":["\/wp-admin\/"]};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/breeze/assets/js/js-front-end/breeze-prefetch-links.min.js" id="breeze-prefetch-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.min.js" id="jquery-core-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery-migrate.min.js" id="jquery-migrate-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/lazysizes.js" id="lazysizes-js"></script>
<link rel="https://api.w.org/" href="https://otus.ru/journal/wp-json/" /><link rel="alternate" type="application/json" href="https://otus.ru/journal/wp-json/wp/v2/posts/3621" /><link rel='shortlink' href='https://otus.ru/journal/?p=3621' />
<link rel="alternate" type="application/json+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fdzhava-i-servlety-chto-dolzhen-znat-razrabotchik%2F" />
<link rel="alternate" type="text/xml+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fdzhava-i-servlety-chto-dolzhen-znat-razrabotchik%2F&format=xml" />
<script>var Sphere_Plugin = {"ajaxurl":"https:\/\/otus.ru\/journal\/wp-admin\/admin-ajax.php"};</script><link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-32x32.png" sizes="32x32" />
<link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-192x192.png" sizes="192x192" />
<link rel="apple-touch-icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-180x180.png" />
<meta name="msapplication-TileImage" content="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-270x270.png" />
<style type="text/css" id="wp-custom-css">
#menu-item-10406 .wpel-icon {
display: none;
}
#menu-item-10407 .wpel-icon {
display: none;
}
.otus-login-site a .wpel-icon {
display: none;
}
.menu-menju-navykov-container a .wpel-icon {
display: none;
}
.otus-login-site a
{
background: #ffd709;
border-radius: 12px;
color: #0f0f10;
font-size: 14px;
font-weight: 700;
line-height: 20px;
display: block;
text-align: center;
padding: 8px 25px;
}
.main-footer.dark {
background: linear-gradient(90deg, #a64fc5, #4f54e6);
border-color: transparent;
}
.main-footer.bold .copyright {
color: #fff;
}
.main-footer.bold .to-top i {
color: #fff;
}
.main-footer.bold .back-to-top {
color: #fff;
}
.nav__scroll {
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
.scrollable-menu .menu {
display: flex;
}
.nav__scroll
{
background: linear-gradient(90deg, #a64fc5, #4f54e6);
}
.scrollable-menu .menu .menu-item {
flex: 0 0 auto;
padding: 15px 15px;
}
.scrollable-menu .menu .menu-item a {
color: #fff;
}
.nav__scroll::-webkit-scrollbar{background-color:#fff;height:5px;}
.nav__scroll::-webkit-scrollbar-thumb{background-color:#dcdcdc;}
.nav__scroll::-webkit-scrollbar-track{-webkit-border-radius:0;border-radius:0;background-color:#fff;}/
body {
min-width: 320px;
}
.banner-click img {
margin: 0 auto;
display: block;
}
.banner-click {
cursor: pointer;
}
.banner-footer-area {
margin-bottom: 20px;
}
.banner-left-area {
margin-top: 40px;
} </style>
<!--Start VDZ Yandex Metrika Plugin-->
<!-- Yandex.Metrika counter --><script type="text/javascript" >(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");ym(34531570, "init", {clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true, trackHash:true, ecommerce:"dataLayer"});</script>
<noscript><div><img src="https://mc.yandex.ru/watch/34531570" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter --><!--START ADD EVENTS FROM CF7--><script type='text/javascript'>document.addEventListener( 'wpcf7submit', function( event ) {
//event.detail.contactFormId;
if(ym){
//console.log(event.detail);
ym(34531570, 'reachGoal', 'VDZ_SEND_CONTACT_FORM_7');
ym(34531570, 'params', {
page_url: window.location.href,
status: event.detail.status,
locale: event.detail.contactFormLocale,
form_id: event.detail.contactFormId,
});
}
}, false );
</script><!--END ADD EVENTS FROM CF7-->
<!--End VDZ Yandex Metrika Plugin-->
</head>
<body class="post-template-default single single-post postid-3621 single-format-standard right-sidebar lazy-normal has-lb">
<div class="main-wrap">
<header id="main-head" class="main-head head-nav-below has-search-modal simple simple-boxed">
<div class="inner inner-head" data-sticky-bar="0">
<div class="wrap cf wrap-head">
<div class="left-contain">
<span class="mobile-nav"><i class="fa fa-bars"></i></span>
<div class="title">
<a href="https://otus.ru/journal/" title="OTUS JOURNAL" rel="home" data-wpel-link="internal">
<span class="text-logo"><img src="/journal/wp-content/themes/contentberg/img/logo_site.svg" alt="OTUS JOURNAL"></span>
</a>
</div>
</div>
<div class="navigation-wrap inline">
<nav class="navigation inline simple light" data-sticky-bar="0">
<div class="menu-rubriki-container"><ul id="menu-rubriki" class="menu"><li id="menu-item-109" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-1 menu-item-109"><a href="https://otus.ru/journal/category/pro-it/" data-wpel-link="internal"><span>Про IT</span></a></li>
<li id="menu-item-113" class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-cat-4 menu-item-113"><a href="https://otus.ru/journal/category/polza/" data-wpel-link="internal"><span>Полезное</span></a></li>
<li id="menu-item-114" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-3 menu-item-114"><a href="https://otus.ru/journal/category/lifestyle/" data-wpel-link="internal"><span>Лайфстайл</span></a></li>
<li id="menu-item-10406" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10406"><a href="https://otus.ru/catalog/courses" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Обучение</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10407" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10407"><a href="https://otus.ru/about" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Информация</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </nav>
</div>
<div class="actions">
<div class="otus-login-site">
<a href="https://otus.ru/login/" target="_blank" data-wpel-link="external" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Войти<span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
<a href="#" title="Search" class="search-link"><i class="fa fa-search"></i></a>
</div>
</div>
</div>
</header> <!-- .main-head -->
<div class="nav nav_disable nav_colored nav_transparent course-categories__nav nav__scroll ">
<div class="container wrap">
<div class="links inline simple light scrollable-menu">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov" class="menu"><li id="menu-item-10413" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10414" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10415" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10416" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10417" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10418" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10419" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10420" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10421" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
</div>
</div>
<div class="main wrap">
<div class="ts-row cf">
<div class="col-8 main-content cf">
<article id="post-3621" class="the-post post-3621 post type-post status-publish format-standard has-post-thumbnail category-polza tag-java">
<header class="post-header the-post-header cf">
<div class="post-meta the-post-meta">
<span class="post-cat">
<a href="https://otus.ru/journal/category/polza/" class="category" data-wpel-link="internal">Полезное</a>
</span>
<h1 class="post-title">
Джава и сервлеты: что должен знать разработчик
</h1>
<a href="https://otus.ru/journal/dzhava-i-servlety-chto-dolzhen-znat-razrabotchik/" class="date-link" data-wpel-link="internal"><time class="post-date">5 мая, 2022</time></a>
</div>
<div class="featured">
<a href="https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-20.png" class="image-link" data-wpel-link="internal"><img width="770" height="515" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20770%20515%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-contentberg-main size-contentberg-main lazyload wp-post-image" alt="Джава и сервлеты: что должен знать разработчик" title="Джава и сервлеты: что должен знать разработчик" decoding="async" fetchpriority="high" data-srcset="https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-20-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-20-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-20-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-20-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-20-270x180.png 270w" data-src="https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-20-770x515.png" data-sizes="(max-width: 770px) 100vw, 770px" /> </a>
</div>
</header><!-- .post-header -->
<div class="post-content description cf entry-content content-normal">
<div id="ez-toc-container" class="ez-toc-v2_0_61 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction">
<div class="ez-toc-title-container">
<p class="ez-toc-title " >Содержание</p>
<span class="ez-toc-title-toggle"><a href="#" class="ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle" aria-label="Toggle Table of Content"><span class="ez-toc-js-icon-con"><span class=""><span class="eztoc-hide" style="display:none;">Toggle</span><span class="ez-toc-icon-toggle-span"><svg style="fill: #999;color:#999" xmlns="http://www.w3.org/2000/svg" class="list-377408" width="20px" height="20px" viewBox="0 0 24 24" fill="none"><path d="M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z" fill="currentColor"></path></svg><svg style="fill: #999;color:#999" class="arrow-unsorted-368013" xmlns="http://www.w3.org/2000/svg" width="10px" height="10px" viewBox="0 0 24 24" version="1.2" baseProfile="tiny"><path d="M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z"/></svg></span></span></span></a></span></div>
<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-1" href="#%D0%9D%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE_%D1%81%D0%BB%D0%BE%D0%B2_%D0%BE_%D0%94%D0%B6%D0%B0%D0%B2%D0%B5" title="Несколько слов о Джаве">Несколько слов о Джаве</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-2" href="#%D0%A1%D0%B5%D1%80%D0%B2%D0%BB%D0%B5%D1%82_%E2%80%93_%D0%BF%D0%BE%D0%BD%D1%8F%D1%82%D0%B8%D0%B5" title="Сервлет – понятие">Сервлет – понятие</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-3" href="#%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F" title="Использования">Использования</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-4" href="#%D0%A1%D0%B8%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D1%8B_%E2%80%93_%D0%BF%D0%BE%D1%87%D0%B5%D0%BC%D1%83_%D1%81%D0%B5%D1%80%D0%B2%D0%BB%D0%B5%D1%82%D1%8B_%D0%BF%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B" title="Сильные стороны – почему сервлеты полезны">Сильные стороны – почему сервлеты полезны</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-5" href="#%D0%9A%D0%BB%D1%8E%D1%87%D0%B5%D0%B2%D1%8B%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8" title="Ключевые задачи">Ключевые задачи</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-6" href="#%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB" title="Жизненный цикл">Жизненный цикл</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-7" href="#%D0%9E_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B8_%E2%80%93_%D0%BA%D0%B0%D0%BA_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C" title="О создании – как реализовать">О создании – как реализовать</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-8" href="#%D0%9F%D1%80%D0%B5%D0%B4%D0%B2%D0%B0%D1%80%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%BF%D0%BE%D0%B4%D0%B3%D0%BE%D1%82%D0%BE%D0%B2%D0%BA%D0%B0" title="Предварительная подготовка">Предварительная подготовка</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-9" href="#%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BA%D0%B0_%D1%81%D0%BE%D0%BF%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F" title="Добавка сопоставления">Добавка сопоставления</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-10" href="#%D0%A3%D0%BD%D0%B8%D0%B2%D0%B5%D1%80%D1%81%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%82%D0%B8%D0%BF" title="Универсальный тип">Универсальный тип</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-11" href="#HTML-%D1%84%D0%B0%D0%B9%D0%BB" title="HTML-файл">HTML-файл</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-12" href="#%D0%A4%D0%B0%D0%B9%D0%BB_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0" title="Файл класса">Файл класса</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-13" href="#%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_Web" title="Создание Web">Создание Web</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-14" href="#%D0%9E%D1%82%D1%81%D0%BB%D0%B5%D0%B6%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D0%B5%D0%B0%D0%BD%D1%81%D0%BE%D0%B2" title="Отслеживание сеансов">Отслеживание сеансов</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-15" href="#%D0%9E_%D1%84%D0%B0%D0%B9%D0%BB%D0%B0%D1%85_cookie" title="О файлах cookie">О файлах cookie</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-16" href="#%D0%9D%D0%B0%D0%B3%D0%BB%D1%8F%D0%B4%D0%BD%D1%8B%D0%B9_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80" title="Наглядный пример">Наглядный пример</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-17" href="#%D0%A1%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%87%D0%BA%D0%B8_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0_Java" title="Странички сервера Java">Странички сервера Java</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-18" href="#%D0%A1%D1%86%D0%B5%D0%BD%D0%B0%D1%80%D0%B8%D0%B8" title="Сценарии">Сценарии</a></li></ul></li></ul></nav></div>
<p>Джава – распространенный язык программирования. Он относится к объектно-ориентированным. Обладает общим назначением. Это значит, что при помощи Java можно писать самые разные утилиты – от мелких «офисных» программ до сложных игр и веб-серверных приложений.</p>
<p>Инструментарий Java относительно богат. Он включает в себя разнообразные библиотеки и фреймворки на все случаи жизни. Отлично совмещается со всеми операционными системы и годится для кроссплатформенной разработки.</p>
<p>Довольно важной частью Джавы являются сервлеты. Именно о них зайдет речь далее в статье. Соответствующий элемент пригодится тем, кто планирует посвятить работу веб-серверной разработке и браузерному контенту.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9D%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE_%D1%81%D0%BB%D0%BE%D0%B2_%D0%BE_%D0%94%D0%B6%D0%B0%D0%B2%D0%B5"></span>Несколько слов о Джаве<span class="ez-toc-section-end"></span></h2>
<p>Джава – удобный и практичный высокоуровневый язык программирования. Необходимую информацию по нему «с нуля» можно отыскать не только среди официальной документации, но и просто в Сети. Там полно обучающих видео, по которым удастся быстро освоить нюансы Java.</p>
<p>Использовать соответствующий язык очень удобно. Он обладает следующими нюансами:</p>
<ul><li>наличие собственной среды разработки;</li><li>кроссплатформенность;</li><li>простота применения;</li><li>универсальность;</li><li>достойный уровень безопасности;</li><li>совместимость с разными базами данных;</li><li>поддержка клиент-серверной разработки;</li><li>богатый функционал и инструментарий;</li><li>хорошо читаемый код;</li><li>понятный даже новичку синтаксис.</li></ul>
<p>Java задействован в случае необходимости создания программного обеспечения, работающего через интернет. Входит в состав большинства популярных движков, что делает этот ЯП максимально удобным и практичным.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D0%B5%D1%80%D0%B2%D0%BB%D0%B5%D1%82_%E2%80%93_%D0%BF%D0%BE%D0%BD%D1%8F%D1%82%D0%B8%D0%B5"></span>Сервлет – понятие<span class="ez-toc-section-end"></span></h2>
<p>Сервлет (servlet) – это интерфейс Java, использование которого будет расширять функциональные возможности имеющегося сервера. Взаимодействует с клиентами путем использования методы «запросы и ответы».</p>
<p>Servlet – это специализированные приложения, работающие на веб-сервере или сервере приложений. Действуют в качестве промежуточного уровня между запросами, которые поступают из браузера или HTTP-клиента, а также базами данных или софтом на HTTP-сервере.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F"></span>Использования<span class="ez-toc-section-end"></span></h3>
<p>Servlet позволяет:</p>
<ul><li>собирать информацию от пользователей через специализированные формы веб-страничек;</li><li>представлять записи из БД или иного источника;</li><li>создавать веб-странички динамическим способом.</li></ul>
<p>Servlets часто заменяют программное обеспечение, реализованное через CGI. Только у сервлетов есть несколько непревзойденных преимуществ перед соответствующими интерфейсами.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D0%B8%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D1%8B_%E2%80%93_%D0%BF%D0%BE%D1%87%D0%B5%D0%BC%D1%83_%D1%81%D0%B5%D1%80%D0%B2%D0%BB%D0%B5%D1%82%D1%8B_%D0%BF%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B"></span>Сильные стороны – почему сервлеты полезны<span class="ez-toc-section-end"></span></h3>
<p>Если сравнивать CGI-утилиты и сервлеты, то у вторых есть ряд плюсов, которые делают «технологию» предельно полезной:</p>
<ul><li>высокий уровень производительности;</li><li>выполнение servlet непосредственно в адресном пространстве веб-сервера – не нужно создавать отдельный процесс, чтобы обработать запрос каждого клиента;</li><li>независимость от используемой платформы, благодаря написанию оных на Java;</li><li>диспетчер безопасности предлагает надежную защиту servlet;</li><li>наличие полной функциональности библиотек классов Джавы.</li></ul>
<p>Стоит обратить внимание на то, что данная «технология» выделяется быстродействием. Она не будет сильно «грузить» операционную систему и server при обработке запросов. Ответы системой выводятся в кратчайшие сроки.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9A%D0%BB%D1%8E%D1%87%D0%B5%D0%B2%D1%8B%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8"></span>Ключевые задачи<span class="ez-toc-section-end"></span></h3>
<p>Servlet имеет определенный ряд задач, которые он будет выполнять. К таковым принято относить:</p>
<ul><li>чтение явной информации, которая отправляется браузерами (или clients);</li><li>считывание неявно заданных электронных материалов HTTP-запроса;</li><li>обработка и генерация результатов, включая обращения к базам данных;</li><li>отправка явных данных (документации) интернет-обозревателям;</li><li>формирование и отправка неявного HTTP-ответа браузеру.</li></ul>
<p>Все это необходимо для качественной работы и стабильного функционирования клиент-серверной модели программного обеспечения совершенно разной сложности.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB"></span>Жизненный цикл<span class="ez-toc-section-end"></span></h3>
<p>Стоит обратить внимание на то, что весь жизненный цикл сервлета находится под управление контейнера сервлета. Оный задействует интерфейс javax.servlet.Servlet для того, чтобы понимать объекты сервлета, а также манипулирования оным.</p>
<p>Жизненный цикл соответствующей «технологии» проходит в несколько этапов. В основном их 4:</p>
<ul><li>старт;</li><li>загрузка и инициализация;</li><li>обработка запроса;</li><li>конец.</li></ul>
<p>Каждый этап предусматривает свои ключевые особенности:</p>
<ol type="1"><li>Старт – это загрузка. Сервер осуществляет запуск, контейнер развертывается, после чего происходит загрузка всех сервлетов.</li><li>Инициализация. Здесь servlet инициализируется через вызов метода init(). Метод Servler.init() вызывается контейнеров Servlet для того, чтобы уведомить о том, что соответствующий экземпляр Servlet успешно создан. Оный готов для дальнейшего использования.</li><li>Обработка запросов. Сервлет будет вызывать метод service() для того, чтобы обработать запрос клиента. Он вызывается для информирования сервлета о клиентских запросах.</li><li>Уничтожение. Это – завершающий этап всей операции. Происходит за счет вызова destroy(). Этот метод будет запущен только один раз за все время существования servlet. Отвечает за сообщение о том, что экземпляр «технологии» заканчивается.</li></ol>
<p>Стоит обратить внимание на то, что методы init() и destroy() за весь жизненный цикл будут вызываться только единожды. Сервлет – это своеобразный сборщик мусора JVM. Так завершается жизненный цикл servlet.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B8_%E2%80%93_%D0%BA%D0%B0%D0%BA_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C"></span>О создании – как реализовать<span class="ez-toc-section-end"></span></h2>
<p>Первое, что нужно знать о рассматриваемой «технологии» — это ее основы и цикл жизни. Данная информация не самая трудная. Далее будут рассмотрены примеры и алгоритмы, которые пригодятся как новичкам, так и продвинутым разрабам.</p>
<p>Для создания servlet необходимо выполнить несколько шагов:</p>
<ol type="1"><li>Продумать и создать структуру каталогов.</li><li>Написать саму «технологию» клиент-серверной модели.</li><li>Провести компиляцию сервлета.</li><li>Добавить сопоставления в документ под названием web.xml.</li><li>Осуществить запуск сервера, а затем провести развертку подготовленного заранее проекта.</li><li>Предоставить (получить) доступ к изучаемой «технологии».</li></ol>
<p>Далее будут рассмотрены наглядные примеры, которые помогут понять принцип работы «методики».</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D1%80%D0%B5%D0%B4%D0%B2%D0%B0%D1%80%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%BF%D0%BE%D0%B4%D0%B3%D0%BE%D1%82%D0%BE%D0%B2%D0%BA%D0%B0"></span>Предварительная подготовка<span class="ez-toc-section-end"></span></h3>
<p>Для того, чтобы справиться с поставленной задачей, предстоит провести небольшую предварительную подготовку. Особенно это касается тех, кто недавно начал работу на Джава.</p>
<p>В подготовку входит:</p>
<ol type="1"><li>Инициализация и настройка сервера Apache Tomcat.</li><li>Если что-то пошло не так – переустановить Eclipse. Он входит в Tomcat.</li><li>Для любой программы сервлета подготовить три Файла: index.html, файл классов Java, а также web.xml.</li></ol>
<p>Для обучения навыкам работы с «технологией», представленной ранее вниманию, необходимо сначала создать веб-проект динамического характера. Приведенный далее пример предназначается для servlet, который помогает осуществить вход в систему. Процесс будет отображаться в качестве вывода в интернет-обозревателе.</p>
<p>Сначала требуется создать файл index.html:</p>
<figure class="wp-block-image size-large"><img decoding="async" width="478" height="498" src="https://otus.ru/journal/wp-content/uploads/2022/05/1-13.jpg" alt="Джава и сервлеты: что должен знать разработчик" class="wp-image-3623" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/1-13.jpg 478w, https://otus.ru/journal/wp-content/uploads/2022/05/1-13-288x300.jpg 288w, https://otus.ru/journal/wp-content/uploads/2022/05/1-13-144x150.jpg 144w" sizes="(max-width: 478px) 100vw, 478px" /></figure>
<p>Далее – осуществить кодирование файла класса Джавы. Итоговый код соответствующего документа выглядит так:</p>
<pre class="wp-block-code"><code>package Edureka;
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.HttpServletResp onse;
public class Login extends HttpServlet
{
protected void doPost(HttpServletRequest req,HttpServletResponse res)throws ServletException,IOException
PrintWriter pw=res.getWriter();
res.setContentType("text/html");
String user=req.getParameter("userName");
String pass=req.getParameter("userPassword");
pw.println("Login Success...!")
if(user.equals("edureka") pass.equals("edureka"))
pw.println("Login Success...!");
else
pw.println("Login Failed...!");
pw.close();
}
}</code></pre>
<p>Приведенный выше код позволяет установить условия – если имя пользователя и пароль — это edureka, то появится сообщение об успешном входе в систему. В противном случае в авторизации будет отказано. После того, как написан файл Джава класса, нужно вписать сопоставление в web.xml.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BA%D0%B0_%D1%81%D0%BE%D0%BF%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F"></span>Добавка сопоставления<span class="ez-toc-section-end"></span></h3>
<p>Для этого требуется запомнить следующие данные:</p>
<ol type="1"><li>Документ web.xml будет находиться в папке WEB-INF рассматриваемой утилиты.</li><li>При отсутствии такового можно кликнуть по дескриптору развертки и щелкнуть по надписи «Создать заглушку дескриптора развертывания».</li><li>После подготовки web.xml потребуется прописать в оном сопоставления.</li></ol>
<figure class="wp-block-image size-large"><img decoding="async" width="707" height="294" src="https://otus.ru/journal/wp-content/uploads/2022/05/2-12.jpg" alt="Джава и сервлеты: что должен знать разработчик" class="wp-image-3624" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/2-12.jpg 707w, https://otus.ru/journal/wp-content/uploads/2022/05/2-12-300x125.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/2-12-150x62.jpg 150w" sizes="(max-width: 707px) 100vw, 707px" /></figure>
<p>Выше – пример сопоставления.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A3%D0%BD%D0%B8%D0%B2%D0%B5%D1%80%D1%81%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%82%D0%B8%D0%BF"></span>Универсальный тип<span class="ez-toc-section-end"></span></h2>
<p>Стоит обратить внимание на то, что есть независимый от протокола сервлет. Он носит название универсального. Предопределяет метод service(), необходимый для обработки клиентских запросов.</p>
<p>У service() есть два аргумента:</p>
<ol type="1"><li>Объект ServletRequest. Он отвечает за информирование сервлета о запросе, который совершает client.</li><li>Элемент ServletResponse. За счет него осуществляется возврат ответа клиенту.</li></ol>
<p>GenericServlet – это абстрактный класс. Имеет единственный метод service(). Когда происходит создание универсального servlet через расширение класса Generic, нужно предопределять ранее упомянутый метод.</p>
<p>Теперь можно посмотреть, как осуществляется вызов такого сервлета. Для этого необходимо провести кодирование трех документов.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="HTML-%D1%84%D0%B0%D0%B9%D0%BB"></span>HTML-файл<span class="ez-toc-section-end"></span></h3>
<p>Здесь потребуется учесть следующее:</p>
<ol type="1"><li>Сначала необходимо создать файл HTML. Он будет отвечать за вызов сервлета.</li><li>Чтобы описанная операция произошла, пользователь должен нажать на ссылку на веб-странице.</li><li>Создавать документ требуется в папке WebContent. Путь к нему – это WebContent/ index.html.</li></ol>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="397" height="103" src="https://otus.ru/journal/wp-content/uploads/2022/05/3-10.jpg" alt="Джава и сервлеты: что должен знать разработчик" class="wp-image-3625" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/3-10.jpg 397w, https://otus.ru/journal/wp-content/uploads/2022/05/3-10-300x78.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/3-10-150x39.jpg 150w" sizes="(max-width: 397px) 100vw, 397px" /></figure>
<p>Выше – код, который должен прописать программер в упомянутом ранее файле.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A4%D0%B0%D0%B9%D0%BB_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0"></span>Файл класса<span class="ez-toc-section-end"></span></h3>
<p>Следующий этап – это прописка универсального сервлета путем расширения класса Generic. Для этого нужно провести предопределение метода service(). Достаточно кликнуть ПКМ по папке src и создать новый файл класса, назвать его общим. Путь будет выглядеть так: Java Resources / src/ default package / generic.java.</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="671" height="263" src="https://otus.ru/journal/wp-content/uploads/2022/05/4-10.jpg" alt="Джава и сервлеты: что должен знать разработчик" class="wp-image-3626" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/4-10.jpg 671w, https://otus.ru/journal/wp-content/uploads/2022/05/4-10-300x118.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/4-10-150x59.jpg 150w" sizes="(max-width: 671px) 100vw, 671px" /></figure>
<p>Выше – то, как будет выглядеть необходимый для реализации задачи исходный код класса Джавы.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_Web"></span>Создание Web<span class="ez-toc-section-end"></span></h3>
<p>Обнаружить соответствующий файлик удастся по пути: WebContent / WEB-INF / web.xml. Там можно сопоставить servlet с конкретным URL-адресом. Рассматриваемый пример – это вызов странички приветствия. После клика по ссылке в index.html произойдет отображение приветствия в класс Servlet, который был создан ранее.</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="411" height="120" src="https://otus.ru/journal/wp-content/uploads/2022/05/5-8.jpg" alt="Джава и сервлеты: что должен знать разработчик" class="wp-image-3627" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/5-8.jpg 411w, https://otus.ru/journal/wp-content/uploads/2022/05/5-8-300x88.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/5-8-150x44.jpg 150w" sizes="(max-width: 411px) 100vw, 411px" /></figure>
<p>Остается запустить сервер Tomcat, а затем – активировать servlet. На экране получится желаемый результат. Предложенная информация – все, что нужно знать об универсальных сервлетах. Дальше речь зайдет о концепциях отслеживания сеансов. Это тоже весьма полезная информация, которая пригодится каждому разработчику клиент-серверной утилиты.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E%D1%82%D1%81%D0%BB%D0%B5%D0%B6%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D0%B5%D0%B0%D0%BD%D1%81%D0%BE%D0%B2"></span>Отслеживание сеансов<span class="ez-toc-section-end"></span></h2>
<p>Сессия означает определенный интервал времени. Отслеживание – это метод поддержки состояния (информации) пользователя. Понятие трактуется также как управление сеансом в пределах сервлета. Каждый раз, когда пользователь обращается к серверу, тот обрабатывает запрос в качестве нового.</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="771" height="285" src="https://otus.ru/journal/wp-content/uploads/2022/05/6-4.jpg" alt="Джава и сервлеты: что должен знать разработчик" class="wp-image-3628" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/6-4.jpg 771w, https://otus.ru/journal/wp-content/uploads/2022/05/6-4-300x111.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/6-4-150x55.jpg 150w, https://otus.ru/journal/wp-content/uploads/2022/05/6-4-768x284.jpg 768w" sizes="(max-width: 771px) 100vw, 771px" /></figure>
<p>Выше – пример того, как выглядит соответствующий процесс. Для распознавания конкретного юзера, требуется всегда проводить отслеживание сеансов.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E_%D1%84%D0%B0%D0%B9%D0%BB%D0%B0%D1%85_cookie"></span>О файлах cookie<span class="ez-toc-section-end"></span></h2>
<p>Cookie – это небольшие фрагменты данных. Они сохраняются между несколькими клиентскими запросами. Имеет такой файл:</p>
<ul><li>значение;</li><li>имя;</li><li>дополнительные атрибуты вроде комментариев;</li><li>путь;</li><li>квалификаторы домена;</li><li>номер версии.</li></ul>
<p>Представлен методом отслеживания сеансов. По умолчанию каждый запрос им будет рассматриваться как новый. Теперь, когда принцип работы файла cookie усвоен, стоит просмотреть, как использовать оный.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9D%D0%B0%D0%B3%D0%BB%D1%8F%D0%B4%D0%BD%D1%8B%D0%B9_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80"></span>Наглядный пример<span class="ez-toc-section-end"></span></h3>
<p>Пусть будут даны два сервлета. Для них разные коды:</p>
<pre class="wp-block-code"><code>package Edureka;
import java.io.*;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
@WebServlet("/login")
public class MyServlet1 extends HttpServlet{
public void doGet(HttpServletRequest request,nbsp; HttpServletResponse resp onse) {
try{
response.setContentType("text/html");
PrintWriter pwriter = response.getWriter();
String name = request.getParameter("userName");
String password = request.getParameter("userPassword");
pwriter.print("Hello here:"+name);
pwriter.print(" Your Password is: "+password);
//Creating two cookies
Cookie c1=new Cookie("userName",name);
Cookie c2=new Cookie("userPassword",password);
//Adding the cookies to response header
response.addCookie(c1);
response.addCookie(c2);
pwriter.print("
<a href='welcomehere'>View Details</a>");
pwriter.close();
}catch(Exception exp){
System.out.println(exp);
}
}
}</code></pre>
<p>Это – MyServlet1. Для второго документа актуальная кодификация:</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="568" height="351" src="https://otus.ru/journal/wp-content/uploads/2022/05/7-4.jpg" alt="Джава и сервлеты: что должен знать разработчик" class="wp-image-3629" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/7-4.jpg 568w, https://otus.ru/journal/wp-content/uploads/2022/05/7-4-300x185.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/7-4-150x93.jpg 150w" sizes="(max-width: 568px) 100vw, 568px" /></figure>
<p>Теперь необходимо:</p>
<ul type="1"><li>Создать HTML-форму для файлов cookie.</li></ul>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="432" height="193" src="https://otus.ru/journal/wp-content/uploads/2022/05/8-3.jpg" alt="Джава и сервлеты: что должен знать разработчик" class="wp-image-3630" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/8-3.jpg 432w, https://otus.ru/journal/wp-content/uploads/2022/05/8-3-300x134.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/8-3-150x67.jpg 150w" sizes="(max-width: 432px) 100vw, 432px" /></figure>
<ul type="1"><li>Создать XML.</li><li>Добавить в последний все сопоставления.</li></ul>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="401" height="234" src="https://otus.ru/journal/wp-content/uploads/2022/05/9-3.jpg" alt="Джава и сервлеты: что должен знать разработчик" class="wp-image-3631" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/9-3.jpg 401w, https://otus.ru/journal/wp-content/uploads/2022/05/9-3-300x175.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/9-3-150x88.jpg 150w" sizes="(max-width: 401px) 100vw, 401px" /></figure>
<p>Можно запускать код и смотреть, что произошло. Именно так функционируют «куки».</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%87%D0%BA%D0%B8_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0_Java"></span>Странички сервера Java<span class="ez-toc-section-end"></span></h2>
<p>Стоит обратить внимание на JSP. Это = технология, которая применяется для веб-приложений. Напоминает сервлеты. Представлено расширением servlet, так как предоставляет больше функциональных возможностей. Страничка JSP включает в себя теги HTML, а также теги JSP. Их проще поддерживать, поэтому можно разделить проектирование и непосредственную разработку.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D1%86%D0%B5%D0%BD%D0%B0%D1%80%D0%B8%D0%B8"></span>Сценарии<span class="ez-toc-section-end"></span></h3>
<p>Когда стало понятно, что такое метод doget, а также examples в коде, можно рассмотреть сценарии. Они позволяют вставлять Джава-код в JSP. Есть несколько типов элементов сценариев:</p>
<ul type="1"><li>Скриптлета. Применяется для обработки и реализации исходного кода Java.</li></ul>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="262" height="67" src="https://otus.ru/journal/wp-content/uploads/2022/05/10-3.jpg" alt="Джава и сервлеты: что должен знать разработчик" class="wp-image-3632" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/10-3.jpg 262w, https://otus.ru/journal/wp-content/uploads/2022/05/10-3-150x38.jpg 150w, https://otus.ru/journal/wp-content/uploads/2022/05/10-3-260x67.jpg 260w" sizes="(max-width: 262px) 100vw, 262px" /></figure>
<ul><li>Выражения. Он позволяет записывать кодификации в выходной поток ответа. Поэтому не нужно осуществлять запись out.print() для записи информации. В основном применяется для того, чтобы печатать значения переменных или методов.</li></ul>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="310" height="73" src="https://otus.ru/journal/wp-content/uploads/2022/05/11-3.jpg" alt="Джава и сервлеты: что должен знать разработчик" class="wp-image-3633" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/11-3.jpg 310w, https://otus.ru/journal/wp-content/uploads/2022/05/11-3-300x71.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/11-3-150x35.jpg 150w, https://otus.ru/journal/wp-content/uploads/2022/05/11-3-306x73.jpg 306w" sizes="(max-width: 310px) 100vw, 310px" /></figure>
<ul><li>Объявление. Помогает объявлять поля и методы. Код, написанный внутри тега JSP, будет размещаться за пределами метода service() автоматически сгенерированного сервлета. Память оный при каждом обращении не получает.</li></ul>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="380" height="76" src="https://otus.ru/journal/wp-content/uploads/2022/05/12-3.jpg" alt="Джава и сервлеты: что должен знать разработчик" class="wp-image-3634" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/12-3.jpg 380w, https://otus.ru/journal/wp-content/uploads/2022/05/12-3-300x60.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/05/12-3-150x30.jpg 150w" sizes="(max-width: 380px) 100vw, 380px" /></figure>
<p>Всего этого достаточно для того, чтобы вникнуть в основы сервлетов Java и клиент-серверных моделей. А для того, чтобы лучше понимать, что такое servlet-name servlet-class, example (в коде), а также JSP, стоит посетить дистанционные онлайн курсы. За короткий срок пользователя научат писать программы на Джаве, а также работать с клиент-серверными моделями. По завершении программы юзеру выдадут электронный сертификат, подтверждающий навыки в выбранном направлении.</p>
<figure class="wp-block-image size-large"><a href="https://otus.ru/lessons/java-specialization/?utm_source=oj&utm_medium=affilate&utm_campaign=java_bandle" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer"><img loading="lazy" decoding="async" width="970" height="90" src="https://otus.ru/journal/wp-content/uploads/2022/05/JavaSpec_Welcome_970x90.png" alt="Джава и сервлеты: что должен знать разработчик" class="wp-image-3636" srcset="https://otus.ru/journal/wp-content/uploads/2022/05/JavaSpec_Welcome_970x90.png 970w, https://otus.ru/journal/wp-content/uploads/2022/05/JavaSpec_Welcome_970x90-300x28.png 300w, https://otus.ru/journal/wp-content/uploads/2022/05/JavaSpec_Welcome_970x90-150x14.png 150w, https://otus.ru/journal/wp-content/uploads/2022/05/JavaSpec_Welcome_970x90-768x71.png 768w" sizes="(max-width: 970px) 100vw, 970px" /></a></figure>
<p></p>
</div><!-- .post-content -->
<div class="the-post-foot cf">
<div class="tag-share cf">
<div class="post-tags"><a href="https://otus.ru/journal/tag/java/" rel="tag" data-wpel-link="internal">Java</a></div>
<div class="post-share">
<div class="post-share-icons cf">
<span class="counters">
</span>
<a href="https://www.facebook.com/sharer.php?u=https%3A%2F%2Fotus.ru%2Fjournal%2Fdzhava-i-servlety-chto-dolzhen-znat-razrabotchik%2F" class="link facebook wpel-icon-right" target="_blank" title="Share on Facebook" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-facebook"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fdzhava-i-servlety-chto-dolzhen-znat-razrabotchik%2F&text=%D0%94%D0%B6%D0%B0%D0%B2%D0%B0%20%D0%B8%20%D1%81%D0%B5%D1%80%D0%B2%D0%BB%D0%B5%D1%82%D1%8B%3A%20%D1%87%D1%82%D0%BE%20%D0%B4%D0%BE%D0%BB%D0%B6%D0%B5%D0%BD%20%D0%B7%D0%BD%D0%B0%D1%82%D1%8C%20%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA" class="link twitter wpel-icon-right" target="_blank" title="Share on Twitter" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-twitter"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fotus.ru%2Fjournal%2Fdzhava-i-servlety-chto-dolzhen-znat-razrabotchik%2F" class="link linkedin wpel-icon-right" target="_blank" title="LinkedIn" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-linkedin"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://pinterest.com/pin/create/button/?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fdzhava-i-servlety-chto-dolzhen-znat-razrabotchik%2F&media=https%3A%2F%2Fotus.ru%2Fjournal%2Fwp-content%2Fuploads%2F2022%2F05%2Foj-1080x720-20.png&description=%D0%94%D0%B6%D0%B0%D0%B2%D0%B0%20%D0%B8%20%D1%81%D0%B5%D1%80%D0%B2%D0%BB%D0%B5%D1%82%D1%8B%3A%20%D1%87%D1%82%D0%BE%20%D0%B4%D0%BE%D0%BB%D0%B6%D0%B5%D0%BD%20%D0%B7%D0%BD%D0%B0%D1%82%D1%8C%20%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA" class="link pinterest wpel-icon-right" target="_blank" title="Pinterest" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-pinterest-p"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
</div>
</div>
</div>
<div class="post-nav">
<div class="post previous cf">
<a href="https://otus.ru/journal/rust-opisanie-osobennosti-ispolzovanie/" title="Prev Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-left"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/rust-opisanie-osobennosti-ispolzovanie/" class="image-link" rel="previous" data-wpel-link="internal">
<img width="150" height="100" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20100%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="Rust: описание, особенности, использование" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-19-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-19-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-19-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-19-768x512.png 768w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-19-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-19-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-19-370x245.png 370w, https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-19.png 1080w" data-src="https://otus.ru/journal/wp-content/uploads/2022/05/oj-1080x720-19-150x100.png" data-sizes="(max-width: 150px) 100vw, 150px" title="Rust: описание, особенности, использование" /> </a>
<div class="post-meta">
<span class="label">Prev Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/rust-opisanie-osobennosti-ispolzovanie/" data-wpel-link="internal">Rust: описание, особенности, использование</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/rust-opisanie-osobennosti-ispolzovanie/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2022-05-05T20:46:02+00:00">5 мая, 2022</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">7 Mins Read</span>
</div>
</div> </div>
</span>
</div>
<div class="post next cf">
<a href="https://otus.ru/journal/novye-meropriyatiya-v-otus-28/" title="Next Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-right"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/novye-meropriyatiya-v-otus-28/" class="image-link" rel="next" data-wpel-link="internal">
<img width="150" height="100" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20100%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="Мероприятия в OTUS" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2022/03/oj-1080x720-10-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2022/03/oj-1080x720-10-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2022/03/oj-1080x720-10-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2022/03/oj-1080x720-10-768x512.png 768w, https://otus.ru/journal/wp-content/uploads/2022/03/oj-1080x720-10-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2022/03/oj-1080x720-10-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2022/03/oj-1080x720-10-370x245.png 370w, https://otus.ru/journal/wp-content/uploads/2022/03/oj-1080x720-10.png 1080w" data-src="https://otus.ru/journal/wp-content/uploads/2022/03/oj-1080x720-10-150x100.png" data-sizes="(max-width: 150px) 100vw, 150px" title="Мероприятия в OTUS" /> </a>
<div class="post-meta">
<span class="label">Next Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/novye-meropriyatiya-v-otus-28/" data-wpel-link="internal">Новые мероприятия в OTUS</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/novye-meropriyatiya-v-otus-28/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2022-05-23T10:13:47+00:00">23 мая, 2022</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">5 Mins Read</span>
</div>
</div> </div>
</span>
</div>
</div>
<section class="related-posts grid-3">
<h4 class="section-head"><span class="title">Читать ещё</span></h4>
<div class="ts-row posts cf">
<article class="post col-4">
<a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" title="Уровень готовности CTO к 2026" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Уровень готовности CTO к 2026" title="Уровень готовности CTO к 2026" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" class="post-link" data-wpel-link="internal">Уровень готовности CTO к 2026</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-16T19:50:59+00:00">16 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" title="Новые уроки ноября: только топ-темы по программированию" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Новые уроки ноября: только топ-темы по программированию" title="Новые уроки ноября: только топ-темы по программированию" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" class="post-link" data-wpel-link="internal">Новые уроки ноября: только топ-темы по программированию</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-09T23:24:11+00:00">9 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/schjot-idjot-na-chasy/" title="Счёт идёт на часы" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Счёт идёт на часы" title="Счёт идёт на часы" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-370x245.png 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/schjot-idjot-na-chasy/" class="post-link" data-wpel-link="internal">Счёт идёт на часы</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-10-30T15:04:59+00:00">30 октября, 2025</time>
</div>
</div>
</article >
</div>
</section>
</article> <!-- .the-post -->
</div>
<aside class="col-4 sidebar">
<div class="inner">
<ul>
<li id="search-2" class="widget widget_search"><h5 class="widget-title"><span>Поиск по блогу</span></h5>
<form method="get" class="search-form" action="https://otus.ru/journal/">
<label>
<span class="screen-reader-text">Search for:</span>
<input type="search" class="search-field" placeholder="Введите запрос и нажмите Enter" value="" name="s" title="Search for:" />
</label>
<button type="submit" class="search-submit"><i class="fa fa-search"></i></button>
</form>
</li>
<li id="tag_cloud-5" class="widget widget_tag_cloud"><h5 class="widget-title"><span>Метки</span></h5><div class="tagcloud"><a href="https://otus.ru/journal/tag/android-2/" class="tag-cloud-link tag-link-74 tag-link-position-1" style="font-size: 12.472222222222pt;" aria-label="Android (34 элемента)" data-wpel-link="internal">Android</a>
<a href="https://otus.ru/journal/tag/c-3/" class="tag-cloud-link tag-link-91 tag-link-position-2" style="font-size: 10.916666666667pt;" aria-label="C (23 элемента)" data-wpel-link="internal">C</a>
<a href="https://otus.ru/journal/tag/c-2/" class="tag-cloud-link tag-link-81 tag-link-position-3" style="font-size: 12.666666666667pt;" aria-label="C# (35 элементов)" data-wpel-link="internal">C#</a>
<a href="https://otus.ru/journal/tag/c/" class="tag-cloud-link tag-link-20 tag-link-position-4" style="font-size: 12.472222222222pt;" aria-label="c++ (34 элемента)" data-wpel-link="internal">c++</a>
<a href="https://otus.ru/journal/tag/computer-science/" class="tag-cloud-link tag-link-209 tag-link-position-5" style="font-size: 15.972222222222pt;" aria-label="computer science (78 элементов)" data-wpel-link="internal">computer science</a>
<a href="https://otus.ru/journal/tag/css/" class="tag-cloud-link tag-link-288 tag-link-position-6" style="font-size: 8.6805555555556pt;" aria-label="CSS (13 элементов)" data-wpel-link="internal">CSS</a>
<a href="https://otus.ru/journal/tag/data-science/" class="tag-cloud-link tag-link-151 tag-link-position-7" style="font-size: 8pt;" aria-label="Data Science (11 элементов)" data-wpel-link="internal">Data Science</a>
<a href="https://otus.ru/journal/tag/devops/" class="tag-cloud-link tag-link-98 tag-link-position-8" style="font-size: 10.138888888889pt;" aria-label="devops (19 элементов)" data-wpel-link="internal">devops</a>
<a href="https://otus.ru/journal/tag/docker/" class="tag-cloud-link tag-link-143 tag-link-position-9" style="font-size: 8.2916666666667pt;" aria-label="Docker (12 элементов)" data-wpel-link="internal">Docker</a>
<a href="https://otus.ru/journal/tag/gamedev/" class="tag-cloud-link tag-link-25 tag-link-position-10" style="font-size: 11.694444444444pt;" aria-label="gamedev (28 элементов)" data-wpel-link="internal">gamedev</a>
<a href="https://otus.ru/journal/tag/hr/" class="tag-cloud-link tag-link-103 tag-link-position-11" style="font-size: 8pt;" aria-label="hr (11 элементов)" data-wpel-link="internal">hr</a>
<a href="https://otus.ru/journal/tag/html/" class="tag-cloud-link tag-link-217 tag-link-position-12" style="font-size: 11.208333333333pt;" aria-label="HTML (25 элементов)" data-wpel-link="internal">HTML</a>
<a href="https://otus.ru/journal/tag/ios/" class="tag-cloud-link tag-link-101 tag-link-position-13" style="font-size: 8.9722222222222pt;" aria-label="iOS (14 элементов)" data-wpel-link="internal">iOS</a>
<a href="https://otus.ru/journal/tag/it/" class="tag-cloud-link tag-link-50 tag-link-position-14" style="font-size: 10.527777777778pt;" aria-label="IT (21 элемент)" data-wpel-link="internal">IT</a>
<a href="https://otus.ru/journal/tag/java/" class="tag-cloud-link tag-link-75 tag-link-position-15" style="font-size: 15.680555555556pt;" aria-label="Java (73 элемента)" data-wpel-link="internal">Java</a>
<a href="https://otus.ru/journal/tag/javascript/" class="tag-cloud-link tag-link-83 tag-link-position-16" style="font-size: 14.319444444444pt;" aria-label="JavaScript (53 элемента)" data-wpel-link="internal">JavaScript</a>
<a href="https://otus.ru/journal/tag/linux/" class="tag-cloud-link tag-link-141 tag-link-position-17" style="font-size: 11.888888888889pt;" aria-label="Linux (29 элементов)" data-wpel-link="internal">Linux</a>
<a href="https://otus.ru/journal/tag/machine-learning/" class="tag-cloud-link tag-link-167 tag-link-position-18" style="font-size: 8.6805555555556pt;" aria-label="Machine Learning (13 элементов)" data-wpel-link="internal">Machine Learning</a>
<a href="https://otus.ru/journal/tag/otus-book/" class="tag-cloud-link tag-link-261 tag-link-position-19" style="font-size: 9.9444444444444pt;" aria-label="otus book (18 элементов)" data-wpel-link="internal">otus book</a>
<a href="https://otus.ru/journal/tag/php/" class="tag-cloud-link tag-link-45 tag-link-position-20" style="font-size: 10.527777777778pt;" aria-label="PHP (21 элемент)" data-wpel-link="internal">PHP</a>
<a href="https://otus.ru/journal/tag/python/" class="tag-cloud-link tag-link-27 tag-link-position-21" style="font-size: 16.944444444444pt;" aria-label="Python (99 элементов)" data-wpel-link="internal">Python</a>
<a href="https://otus.ru/journal/tag/qa/" class="tag-cloud-link tag-link-155 tag-link-position-22" style="font-size: 11.402777777778pt;" aria-label="qa (26 элементов)" data-wpel-link="internal">qa</a>
<a href="https://otus.ru/journal/tag/sql/" class="tag-cloud-link tag-link-38 tag-link-position-23" style="font-size: 12.861111111111pt;" aria-label="SQL (37 элементов)" data-wpel-link="internal">SQL</a>
<a href="https://otus.ru/journal/tag/team-lead/" class="tag-cloud-link tag-link-364 tag-link-position-24" style="font-size: 9.9444444444444pt;" aria-label="team lead (18 элементов)" data-wpel-link="internal">team lead</a>
<a href="https://otus.ru/journal/tag/unity/" class="tag-cloud-link tag-link-24 tag-link-position-25" style="font-size: 8pt;" aria-label="unity (11 элементов)" data-wpel-link="internal">unity</a>
<a href="https://otus.ru/journal/tag/algoritmy/" class="tag-cloud-link tag-link-30 tag-link-position-26" style="font-size: 9.9444444444444pt;" aria-label="Алгоритмы (18 элементов)" data-wpel-link="internal">Алгоритмы</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh/" class="tag-cloud-link tag-link-40 tag-link-position-27" style="font-size: 10.138888888889pt;" aria-label="Базы данных (19 элементов)" data-wpel-link="internal">Базы данных</a>
<a href="https://otus.ru/journal/tag/matematika/" class="tag-cloud-link tag-link-44 tag-link-position-28" style="font-size: 10.916666666667pt;" aria-label="Математика (23 элемента)" data-wpel-link="internal">Математика</a>
<a href="https://otus.ru/journal/tag/arhitektura-po/" class="tag-cloud-link tag-link-10 tag-link-position-29" style="font-size: 9.4583333333333pt;" aria-label="архитектура ПО (16 элементов)" data-wpel-link="internal">архитектура ПО</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh-2/" class="tag-cloud-link tag-link-251 tag-link-position-30" style="font-size: 10.138888888889pt;" aria-label="базы данных (19 элементов)" data-wpel-link="internal">базы данных</a>
<a href="https://otus.ru/journal/tag/vebinar/" class="tag-cloud-link tag-link-201 tag-link-position-31" style="font-size: 13.930555555556pt;" aria-label="вебинар (48 элементов)" data-wpel-link="internal">вебинар</a>
<a href="https://otus.ru/journal/tag/dajdzhest/" class="tag-cloud-link tag-link-308 tag-link-position-32" style="font-size: 10.722222222222pt;" aria-label="дайджест (22 элемента)" data-wpel-link="internal">дайджест</a>
<a href="https://otus.ru/journal/tag/zapis-vebinara/" class="tag-cloud-link tag-link-226 tag-link-position-33" style="font-size: 14.902777777778pt;" aria-label="запись вебинара (61 элемент)" data-wpel-link="internal">запись вебинара</a>
<a href="https://otus.ru/journal/tag/zapis-uroka/" class="tag-cloud-link tag-link-272 tag-link-position-34" style="font-size: 16.069444444444pt;" aria-label="запись урока (80 элементов)" data-wpel-link="internal">запись урока</a>
<a href="https://otus.ru/journal/tag/informacionnaya-bezopasnost/" class="tag-cloud-link tag-link-232 tag-link-position-35" style="font-size: 10.138888888889pt;" aria-label="информационная безопасность (19 элементов)" data-wpel-link="internal">информационная безопасность</a>
<a href="https://otus.ru/journal/tag/karera-v-it/" class="tag-cloud-link tag-link-292 tag-link-position-36" style="font-size: 9.9444444444444pt;" aria-label="карьера в IT (18 элементов)" data-wpel-link="internal">карьера в IT</a>
<a href="https://otus.ru/journal/tag/podborka/" class="tag-cloud-link tag-link-7 tag-link-position-37" style="font-size: 12.666666666667pt;" aria-label="подборка (35 элементов)" data-wpel-link="internal">подборка</a>
<a href="https://otus.ru/journal/tag/podborka-statej/" class="tag-cloud-link tag-link-219 tag-link-position-38" style="font-size: 15.777777777778pt;" aria-label="подборка статей (75 элементов)" data-wpel-link="internal">подборка статей</a>
<a href="https://otus.ru/journal/tag/programmirovanie/" class="tag-cloud-link tag-link-65 tag-link-position-39" style="font-size: 22pt;" aria-label="программирование (332 элемента)" data-wpel-link="internal">программирование</a>
<a href="https://otus.ru/journal/tag/proekt/" class="tag-cloud-link tag-link-321 tag-link-position-40" style="font-size: 11.888888888889pt;" aria-label="проект (29 элементов)" data-wpel-link="internal">проект</a>
<a href="https://otus.ru/journal/tag/proektnaya-rabota/" class="tag-cloud-link tag-link-310 tag-link-position-41" style="font-size: 11.597222222222pt;" aria-label="проектная работа (27 элементов)" data-wpel-link="internal">проектная работа</a>
<a href="https://otus.ru/journal/tag/seti/" class="tag-cloud-link tag-link-181 tag-link-position-42" style="font-size: 12.958333333333pt;" aria-label="сети (38 элементов)" data-wpel-link="internal">сети</a>
<a href="https://otus.ru/journal/tag/testirovanie/" class="tag-cloud-link tag-link-69 tag-link-position-43" style="font-size: 13.930555555556pt;" aria-label="тестирование (48 элементов)" data-wpel-link="internal">тестирование</a>
<a href="https://otus.ru/journal/tag/upravlenie-komandoj/" class="tag-cloud-link tag-link-63 tag-link-position-44" style="font-size: 11.694444444444pt;" aria-label="управление командой (28 элементов)" data-wpel-link="internal">управление командой</a>
<a href="https://otus.ru/journal/tag/habr-2/" class="tag-cloud-link tag-link-203 tag-link-position-45" style="font-size: 13.930555555556pt;" aria-label="хабр (48 элементов)" data-wpel-link="internal">хабр</a></div>
</li>
</ul>
</div>
</aside>
</div> <!-- .ts-row -->
</div> <!-- .main -->
<footer class="main-footer dark bold">
<section class="lower-footer cf">
<div class="wrap">
<div class="links">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov-1" class="menu"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
<p class="copyright"> © 2015-2026 OTUS </p>
<div class="to-top">
<a href="#" class="back-to-top"><i class="fa fa-angle-up"></i> Top</a>
</div>
</div>
</section>
</footer>
</div> <!-- .main-wrap -->
<div class="mobile-menu-container off-canvas" id="mobile-menu">
<a href="#" class="close"><i class="fa fa-times"></i></a>
<div class="logo">
</div>
<ul class="mobile-menu"></ul>
</div>
<div class="search-modal-wrap">
<div class="search-modal-box" role="dialog" aria-modal="true">
<form method="get" class="search-form" action="https://otus.ru/journal/">
<input type="search" class="search-field" name="s" placeholder="Search..." value="" required />
<button type="submit" class="search-submit visuallyhidden">Submit</button>
<p class="message">
Type above and press <em>Enter</em> to search. Press <em>Esc</em> to cancel. </p>
</form>
</div>
</div>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/js/url-span.js" id="wbcr-comments-plus-url-span-js"></script>
<script type="text/javascript" id="ez-toc-scroll-scriptjs-js-extra">
/* <![CDATA[ */
var eztoc_smooth_local = {"scroll_offset":"30"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/smooth_scroll.min.js" id="ez-toc-scroll-scriptjs-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/js-cookie/js.cookie.min.js" id="ez-toc-js-cookie-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/sticky-kit/jquery.sticky-kit.min.js" id="ez-toc-jquery-sticky-kit-js"></script>
<script type="text/javascript" id="ez-toc-js-js-extra">
/* <![CDATA[ */
var ezTOC = {"smooth_scroll":"1","visibility_hide_by_default":"","scroll_offset":"30","fallbackIcon":"<span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span>"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/front.min.js" id="ez-toc-js-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/custom-script.js" id="custom-script-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/magnific-popup.js" id="magnific-popup-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.fitvids.js" id="jquery-fitvids-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/imagesloaded.min.js" id="imagesloaded-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/object-fit-images.js" id="object-fit-images-js"></script>
<script type="text/javascript" id="contentberg-theme-js-extra">
/* <![CDATA[ */
var Bunyad = {"custom_ajax_url":"\/journal\/dzhava-i-servlety-chto-dolzhen-znat-razrabotchik\/"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theme.js" id="contentberg-theme-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theia-sticky-sidebar.js" id="theia-sticky-sidebar-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.slick.js" id="jquery-slick-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jarallax.js" id="jarallax-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/masonry.min.js" id="masonry-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.masonry.min.js" id="jquery-masonry-js"></script>
</body>
</html>
<!-- Cache served by breeze CACHE - Last modified: Mon, 09 Mar 2026 15:53:55 GMT -->