web add info for 1 milestone
deploy / Pull and Restart (push) Successful in 18s

This commit is contained in:
roma-dxunvrs
2026-10-31 22:26:37 +03:00
parent 2ec4a7e7db
commit c654fcd9c2
@@ -232,3 +232,74 @@ public class MyFilter implements Filter {
</web-app>
```
> [!important] Порядок сверху вниз, но если использовать аннотации, то порядок недетерминирован
## Конфигурация аннотациями
Конфигурация можно писать прямо в Java коде. Tomcat сам сканирует классы и регистрирует компоненты
### Сервлеты
`@WebServlet` - замена `<servlet>` и `<servlet-mapping>`
```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", // Аналог <servlet-name>
urlPatterns = {"/api/check", "/run"},// Можно привязать сразу несколько URL!
loadOnStartup = 1, // Запустить при старте сервера
initParams = { // Замена <init-param>
@WebInitParam(name = "adminEmail", value = "admin@itmo.ru"),
@WebInitParam(name = "maxSize", value = "5000")
}
)
public class CheckServlet extends HttpServlet { ... }
```
### Фильтры
`@WebFilter` - замена `<filter>` и `<filter-mapping>`
```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");` - для всех сервлетов