1
+ package Filter .Filters ;
2
+ /*
3
+ Выбираем библиотеку JAKARTA при выборе имплиментируемого интерфейса.
4
+ У данного интерфейса есть классические методы сервлетов init и destroy
5
+ (они дефолтные и их, естественно, можно переопределить).
6
+
7
+ Наш первый фильтр просто установит кодировку на странице к которой
8
+ обратился пользователь (и на ответ сервера).
9
+ */
10
+ import jakarta .servlet .*;
11
+ import jakarta .servlet .annotation .WebFilter ;
12
+
13
+ import java .io .IOException ;
14
+ import java .nio .charset .StandardCharsets ;
15
+
16
+ /*
17
+ В отличие от классического сервлета у фильтра аннотация @WebFilter,
18
+ методы init и destroy, у него тоже есть. В выбранном случае, а именно
19
+ "/*" наш сервлет фильтр будет срабатывать на все запросы пользователя
20
+ из-за значка астериск.
21
+
22
+ В параметрах можно задавать несколько URL паттернов через запятую или
23
+ имена сервлетов, где будет применяться данный фильтр. Если они заранее
24
+ прописаны в каждом сервлете, например так:
25
+
26
+ @WebServlet(value = "/registration", name = "UserRegForm"))
27
+ */
28
+ @ WebFilter ("/*" )
29
+ public class CharsetFilter implements Filter {
30
+ @ Override
31
+ public void doFilter (ServletRequest servletRequest ,
32
+ ServletResponse servletResponse ,
33
+ FilterChain filterChain ) throws IOException , ServletException {
34
+ /* Устанавливаем кодировку на запрос и ответ */
35
+ servletRequest .setCharacterEncoding (StandardCharsets .UTF_8 .name ());
36
+ servletResponse .setCharacterEncoding (StandardCharsets .UTF_8 .name ());
37
+ /*
38
+ Нам необходимо решить сразу вернуть ответ по запросу пользователя
39
+ или передать запрос/ответ дальше по цепочке, либо другому фильтру,
40
+ либо сервлету обрабатывающему запросы по заданному URL
41
+ */
42
+ filterChain .doFilter (servletRequest , servletResponse );
43
+ }
44
+ }
0 commit comments