Лучшее руководство по JSP фильтр в 2024 году. В этом руководстве вы можете изучить Метод Servlet фильтра,экземпляр фильтра JSP,С использованием множества фильтров,Фильтры применяются последовательно,web.xml инструкции по конфигурации для каждого узла,
JSP фильтр
JSP и Servlet фильтры в классах Java.
Фильтры могут динамически перехватывает запрос и ответ для того, чтобы трансформировать или использовать информацию, содержащуюся в запросе или ответе.
Один или более фильтров могут быть присоединены к Servlet или сервлет. Фильтры могут быть присоединены к JavaServer Pages (JSP) файлы и HTML-страниц.
Фильтры доступны для класса программирования Java Servlet, вы можете решить следующие задачи:
- Перед обращением доступ к серверным ресурсам, клиент перехватывают эти запросы.
- Перед тем как сервер отправляет ответ обратно клиенту, чтобы иметь дело с этими ответами.
В соответствии со спецификацией, рекомендованного различными типами фильтров:
- Аутентификация фильтр (Authentication фильтры).
- Сжатие данных фильтра (сжатие данных фильтров).
- Шифрование Фильтры (шифрование фильтры).
- Ресурс фильтра инициирующее событие доступа.
- фильтры преобразования изображения (конвертация изображений фильтры).
- Протоколирование и аудит фильтров (Протоколирование и аудит фильтров).
- Цепь фильтра MIME-TYPE (MIME-типа цепочки фильтров).
- Маркированный фильтр (Tokenizing фильтры).
- XSL T фильтр / (XSL / T фильтры), преобразование содержимого XML.
Фильтр дескриптора развертывания (web.xml) в XML-тегов с помощью веб-заявления, а затем отображается в Дескриптор имя сервлета или шаблон URL вашего приложения.
Когда веб-контейнер для запуска веб-приложения, то это будет для вас в декларации дескриптора развертывания для каждого фильтра для создания экземпляра.
порядок выполнения фильтра согласуется с порядком расположения в конфигурационном файле web.xml, как правило, конфигурации фильтра перед всеми Servlet.
Метод Servlet фильтра
Фильтр является классом Java, который реализует интерфейс javax.servlet.Filter. Интерфейс javax.servlet.Filter определяет три метода:
序号 | 方法 & 描述 |
---|---|
1 | public void doFilter (ServletRequest, ServletResponse, FilterChain) 该方法完成实际的过滤操作,当客户端请求方法与过滤器设置匹配的URL时,Servlet容器将先调用过滤器的doFilter方法。FilterChain用户访问后续过滤器。 |
2 | public void init(FilterConfig filterConfig) web 应用程序启动时,web 服务器将创建Filter 的实例对象,并调用其init方法,读取web.xml配置,完成对象的初始化功能,从而为后续的用户请求作好拦截的准备工作(filter对象只会创建一次,init方法也只会执行一次)。开发人员通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象。 |
3 | public void destroy() Servlet容器在销毁过滤器实例前调用该方法,在该方法中释放Servlet过滤器占用的资源。 |
использование FilterConfig
Метод инициализации Filter предоставляет объект FilterConfig.
Web.xml файл конфигурации следующим образом:
<filter> <filter-name>LoginFilter</filter-name> <filter-class>com.w3big.test.LogFilter</filter-class> <init-param> <param-name>Site</param-name> <param-value>本教程</param-value> </init-param> </filter>
Используйте объект FilterConfig, чтобы получить параметры в методе инициализации:
public void init(FilterConfig config) throws ServletException { // 获取初始化参数 String site = config.getInitParameter("Site"); // 输出初始化参数 System.out.println("网站名称: " + site); }
экземпляр фильтра JSP
Ниже приведены примеры сервлетов фильтров, имя выходного и адрес веб-сайта. Примеры сервлетов, чтобы дать вам общее представление о фильтре, вы можете использовать ту же концепцию, чтобы писать более сложные приложения фильтров:
//导入必需的 java 库 import javax.servlet.*; import java.util.*; //实现 Filter 类 public class LogFilter implements Filter { public void init(FilterConfig config) throws ServletException { // 获取初始化参数 String site = config.getInitParameter("Site"); // 输出初始化参数 System.out.println("网站名称: " + site); } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, ServletException { // 输出站点名称 System.out.println("站点网址:http://www.w3write.com"); // 把请求传回过滤链 chain.doFilter(request,response); } public void destroy( ){ /* 在 Filter 实例被 Web 容器从服务移除之前调用 */ } }
DisplayHeader.java файла код выглядит следующим образом:
//导入必需的 java 库 import java.io.IOException; import java.io.PrintWriter; import java.util.Enumeration; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/DisplayHeader") //扩展 HttpServlet 类 public class DisplayHeader extends HttpServlet { // 处理 GET 方法请求的方法 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置响应内容类型 response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); String title = "HTTP Header 请求实例 - 本教程实例"; String docType = "<!DOCTYPE html> \n"; out.println(docType + "<html>\n" + "<head><meta charset=\"utf-8\"><title>" + title + "</title></head>\n"+ "<body bgcolor=\"#f0f0f0\">\n" + "<h1 align=\"center\">" + title + "</h1>\n" + "<table width=\"100%\" border=\"1\" align=\"center\">\n" + "<tr bgcolor=\"#949494\">\n" + "<th>Header 名称</th><th>Header 值</th>\n"+ "</tr>\n"); Enumeration headerNames = request.getHeaderNames(); while(headerNames.hasMoreElements()) { String paramName = (String)headerNames.nextElement(); out.print("<tr><td>" + paramName + "</td>\n"); String paramValue = request.getHeader(paramName); out.println("<td> " + paramValue + "</td></tr>\n"); } out.println("</table>\n</body></html>"); } // 处理 POST 方法请求的方法 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
Web.xml отображение сервлета фильтра (Фильтр сервлета Mapping)
Определить фильтры, а затем сопоставляются с URL или Servlet, которые определяют Servlet, а затем сопоставляются шаблону URL почти таким же способом. Создайте следующую запись для фильтра тега в файл описания развертыванияweb.xml:
<?xml version="1.0" encoding="UTF-8"?> <web-app> <filter> <filter-name>LogFilter</filter-name> <filter-class>com.w3big.test.LogFilter</filter-class> <init-param> <param-name>Site</param-name> <param-value>本教程</param-value> </init-param> </filter> <filter-mapping> <filter-name>LogFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <!-- 类名 --> <servlet-name>DisplayHeader</servlet-name> <!-- 所在的包 --> <servlet-class>com.w3big.test.DisplayHeader</servlet-class> </servlet> <servlet-mapping> <servlet-name>DisplayHeader</servlet-name> <!-- 访问的网址 --> <url-pattern>/TomcatTest/DisplayHeader</url-pattern> </servlet-mapping> </web-app>
Фильтр применяется ко всем Servlet, потому что мы указали в конфигурации/ *.Если вы хотите применить фильтр на небольшом количестве Servlet, вы можете указать конкретный путь Servlet.
Теперь попробуйте обычным способом вызвать любой Servlet, вы увидите созданные журналы веб-сервера. Вы можете также использовать рекордер к выше протоколирования Log4J в отдельный файл.
Далее мы посетим этот экземпляр адрес HTTP: // локальный: 8080 / TomcatTest / DisplayHeader, а затем посмотреть на выходе в консоли, следующим образом :
С использованием множества фильтров
Веб-приложения могут быть несколько различных фильтров, основанных на конкретной цели, определенной. Предположим , что вы определили два фильтраAuthenFilterиLogFilter.Необходимо создать другое отображение, описанное ниже, и выше остальной части процесса, по существу, то же самое объяснение:
<Filter> LogFilter <имя-фильтра /> <имя-фильтра> <Фильтр-класс> com.w3big.test.LogFilter </ фильтр класса> <Init-PARAM> <Парам-имя>-тест PARAM </ PARAM-имя> <Парам-значение> Инициализация параметра Я </ PARAM-значение> </ Init-PARAM> </ Filter> <Filter> AuthenFilter <имя-фильтра /> <имя-фильтра> <Фильтр-класс> com.w3big.test.AuthenFilter </ фильтр класса> <Init-PARAM> <Парам-имя>-тест PARAM </ PARAM-имя> <Парам-значение> Инициализация параметра Я </ PARAM-значение> </ Init-PARAM> </ Filter> <Фильтр-отображение> LogFilter <имя-фильтра /> <имя-фильтра> <URL-шаблон> / * </ URL-шаблон> </ Фильтр-отображение> <Фильтр-отображение> AuthenFilter <имя-фильтра /> <имя-фильтра> <URL-шаблон> / * </ URL-шаблон> </ Фильтр-отображение>
Фильтры применяются последовательно
Заказ в web.xml фильтр-отображения элемента определяет веб-контейнер для применения фильтров к заказу Servlet. Чтобы изменить порядок фильтра, вам нужно всего лишь обратный элемент фильтра отображения в файле web.xml.
Например, приведенный выше пример будет первым приложением LogFilter, а затем применить AuthenFilter, но следующие примеры в обратном порядке:
<filter-mapping> <filter-name>AuthenFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>LogFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
web.xml инструкции по конфигурации для каждого узла
-
<filter>
Задает фильтр.-
<filter-name>
используется , чтобы указать имя для фильтра, содержание элемента не может быть пустым. -
<filter-class>
элемент используется для указания полное имя класса фильтра. -
<init-param>
элемент используется для задания параметров инициализации для фильтра, его дочерние элементы<param-name>
указывает имя параметра,<param-value>
значение указанных параметров. - В фильтре можно использовать
FilterConfig
объект интерфейса для доступа к параметрам инициализации.
-
-
<filter-mapping>
элемент используется для установки ресурса фильтра отвечает перехвачены. Фильтр перехвата ресурса может быть определен двумя способами: имя запроса путь сервлета и доступа к ресурсам-
<filter-name>
дочерний элемент используется для установки зарегистрированного имени фильтра. Значение должно быть в<filter>
объявления элементов во имя фильтра через -
<url-pattern>
установлен фильтр перехватил запрос путь (URL - фильтр , связанный стиль)
-
-
<servlet-name>
Указывает фильтр заблокирован имя сервлета. -
<dispatcher>
указать фильтр перехваченные ресурсы называются Servlet контейнеров, которые могут быть поREQUEST
,INCLUDE
,FORWARD
иERROR
один по умолчаниюREQUEST
. Пользователи могут настроить несколько<dispatcher>
подэлемент используется для указания Фильтр ресурс несколько способов перехвата вызовов. -
<dispatcher>
значение и значение подэлементов , которые могут быть установлены-
REQUEST
: Когда пользователь прямой доступ к страницам, Web - контейнер будет вызывать фильтр. Если целью является метод доступа к ресурсу, то фильтр не будет вызван включать () вперед или RequestDispatcher (в). -
INCLUDE
: Если целевой ресурс доступен через RequestDispatcher включают в себя (), то фильтр будет называться. Кроме того, фильтры не будут называться. -
FORWARD
: Если целевой ресурс доступен через RequestDispatcher вперед () метод, то фильтр будет вызван, кроме того, фильтр не будет вызываться. -
ERROR
: Если целевой ресурс через декларативный механизм обработки исключений называется, то фильтр будет называться. Кроме того, фильтр не будет вызван.
-