From c654fcd9c2bb18c1af3e50d3d4d4e843ace8c882 Mon Sep 17 00:00:00 2001 From: roma-dxunvrs Date: Sat, 31 Oct 2026 22:26:37 +0300 Subject: [PATCH] web add info for 1 milestone --- Веб/Клиент-сервер/Java Servlets.md | 71 ++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/Веб/Клиент-сервер/Java Servlets.md b/Веб/Клиент-сервер/Java Servlets.md index ef4e8f0..a0296f5 100644 --- a/Веб/Клиент-сервер/Java Servlets.md +++ b/Веб/Клиент-сервер/Java Servlets.md @@ -232,3 +232,74 @@ public class MyFilter implements Filter { ``` > [!important] Порядок сверху вниз, но если использовать аннотации, то порядок недетерминирован +## Конфигурация аннотациями +Конфигурация можно писать прямо в Java коде. Tomcat сам сканирует классы и регистрирует компоненты +### Сервлеты +`@WebServlet` - замена `` и `` +```Java +import jakarta.servlet.annotation.WebServlet; +import jakarta.servlet.http.HttpServlet; + +@WebServlet("/api/check") +public class CheckServlet extends HttpServlet {} +``` +Продвинутый вариант +```Java +import jakarta.servlet.annotation.WebServlet; +import jakarta.servlet.annotation.WebInitParam; + +@WebServlet( + name = "MyCheckLogic", // Аналог + urlPatterns = {"/api/check", "/run"},// Можно привязать сразу несколько URL! + loadOnStartup = 1, // Запустить при старте сервера + initParams = { // Замена + @WebInitParam(name = "adminEmail", value = "admin@itmo.ru"), + @WebInitParam(name = "maxSize", value = "5000") + } +) +public class CheckServlet extends HttpServlet { ... } +``` +### Фильтры +`@WebFilter` - замена `` и `` +```Java +import jakarta.servlet.annotation.WebFilter; +import jakarta.servlet.Filter; + +@WebFilter(urlPatterns = "/*") +public class EncodingFilter implements Filter {} +``` +## Справка по параметрам/аттрибутам +### Внешние данные от пользователя +- `getParameter()` +- Приходит от браузера/клиента по сети +- Возвращает `String` или `null` +- Находится в URL или в теле запроса +- Приоритет у первого query параметра +- `String user = request.getParameter("red");` +- Если несколько `String[] colors = request.getParameterValues("color");` +- Никакого `set` не существует +### Внутренние данные приложения +- `getAttribute()` и `setAttribute()` +- Записывается Java-кодом на сервере. Браузер ничего не знает +- Возвращает `Object` или `null`, поэтому требует явного каста +- Внутри запроса `HttpServletRequest` - живет 1 запрос + - Используется для передачи из Model в View + - `request.setAttribute("myUser", new User()); User u = (User) request.getAttribute("myUser");` +- Внутри сессии `HttpSession` - живет пока юзер на сайте + - `HttpSession session = request.getSession();` + - `session.setAttribute("role", "ADMIN")`; + - `String role = (String) session.getAttribute("role");` +- Внутри контекста `ServletContext` - живет пока работает сервер + - `ServletContext context = getServletContext();` + - `context.setAttribute()` и `context.getAttribute()` +### Метаданные HTTP +- `getHeader()` +- Приходит от браузера в служебных строках +- Возвращает `String` или `null` +- `request.getHeader("Authorization");` +### Статические настройки из файла конфигурации +- `getInitParameter()` +- Читается сервером из файла `web.xml` или аннотаций +- Возвращает `String` или `null` +- `String email = getServletConfig().getInitParameter("email");` - для сервлета +- `String dbUrl = getServletContext().getInitParameter("dbUrl");` - для всех сервлетов