This commit is contained in:
@@ -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");` - для всех сервлетов
|
||||
|
||||
Reference in New Issue
Block a user