This commit is contained in:
@@ -232,3 +232,74 @@ public class MyFilter implements Filter {
|
|||||||
</web-app>
|
</web-app>
|
||||||
```
|
```
|
||||||
> [!important] Порядок сверху вниз, но если использовать аннотации, то порядок недетерминирован
|
> [!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");` - для всех сервлетов
|
||||||
|
|||||||
Reference in New Issue
Block a user