Filter细节-web.xml配置方式、Filter细节-执行流程&生命周期
Filter-细节-web.xml配置方式
咱们先把之前写的那个FilterDemo1类里面的WebFilter注解,注释掉才可以写web.xml
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <filter> <filter-name>demo1</filter-name> <filter-class>com.example.filter.FilterDemo1</filter-class> </filter> <filter-mapping> <filter-name>demo1</filter-name> <!-- 拦截路径--> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
Filter-细节-执行流程&生命周期
执行流程:
FilterDemo2类
package com.example.filter; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException; @WebFilter(value = "/*") public class FilterDemo2 implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("filterDemo2执行了...."); // 放行 filterChain.doFilter(servletRequest,servletResponse); System.out.println("filterDemo2回来了...."); } @Override public void destroy() { } }
index.jsp
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <!DOCTYPE html> <html> <head> <title>$Title$</title> </head> <body> index.jsp.... <% System.out.println("index.jsp...."); %> </body> </html>
生命周期
FilterDemo3类
package com.example.filter; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException; /** * 生命周期 */ @WebFilter("/*") public class FilterDemo3 implements Filter { // 在服务器启动后,会创建Fitter对象,然后调用init对象,只执行一次,用于加载资源 @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("init..."); } // 每一次请求资源被拦截,会被执行。执行多次 @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { // 对request对象请求消息增强 System.out.println("FilterDemo2..."); // 放行 filterChain.doFilter(servletRequest,servletResponse); } // 在服务器关闭后,Filter对象被销毁,如果是正常关闭,则会执行destroy对象,只执行一次,用于释放资源 @Override public void destroy() { System.out.println("destroy..."); } }
init:在服务器启动后,会创建Fitter对象,然后调用init对象,只执行一次,用于加载资源
doFitter:每一次请求资源时被拦截,会被执行,执行多次
destroy:在服务器关闭后,Fitter对象被销毁,如果是正常关闭,则会执行destroy对象,只执行一次,用于释放资源