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对象,只执行一次,用于释放资源

posted @ 2023-02-13 15:36  肥宅快乐水~  阅读(105)  评论(0编辑  收藏  举报