Лучшее руководство по JSP фильтр в 2024 году. В этом руководстве вы можете изучить Метод Servlet фильтра,экземпляр фильтра JSP,С использованием множества фильтров,Фильтры применяются последовательно,web.xml инструкции по конфигурации для каждого узла,
JSP и Servlet фильтры в классах Java.
Фильтры могут динамически перехватывает запрос и ответ для того, чтобы трансформировать или использовать информацию, содержащуюся в запросе или ответе.
Один или более фильтров могут быть присоединены к Servlet или сервлет. Фильтры могут быть присоединены к JavaServer Pages (JSP) файлы и HTML-страниц.
Фильтры доступны для класса программирования Java Servlet, вы можете решить следующие задачи:
В соответствии со спецификацией, рекомендованного различными типами фильтров:
Фильтр дескриптора развертывания (web.xml) в XML-тегов с помощью веб-заявления, а затем отображается в Дескриптор имя сервлета или шаблон URL вашего приложения.
Когда веб-контейнер для запуска веб-приложения, то это будет для вас в декларации дескриптора развертывания для каждого фильтра для создания экземпляра.
порядок выполнения фильтра согласуется с порядком расположения в конфигурационном файле web.xml, как правило, конфигурации фильтра перед всеми 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过滤器占用的资源。 |
Метод инициализации 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); }
Ниже приведены примеры сервлетов фильтров, имя выходного и адрес веб-сайта. Примеры сервлетов, чтобы дать вам общее представление о фильтре, вы можете использовать ту же концепцию, чтобы писать более сложные приложения фильтров:
//导入必需的 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); } }
Определить фильтры, а затем сопоставляются с 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>
<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
: Если целевой ресурс через декларативный механизм обработки исключений называется, то фильтр будет называться. Кроме того, фильтр не будет вызван.