随笔都是学习笔记
随笔仅供参考,为避免笔记中可能出现的错误误导他人,请勿转载。

简介:

控制过滤器的执行顺序:<filter-mapping>

<filter-mapping>的配置顺序决定了Filter的执行顺序;

创建两个Servlet:

AServlet:

package demo1;

import java.io.IOException;
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("/AServlet")
public class AServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("------Aervlet 0-----");
        System.out.println("------Aervlet 1-----");
    }
}

BServlet:

package demo1;

import java.io.IOException;

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("/BServlet")
public class BServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("----------- BServlet 0---------");
        req.getRequestDispatcher("/AServlet").forward(req, resp); //转发
        System.out.println("----------- BServlet 1---------");
    }
}

再创建AFilter和BFilter:

AFilter:

package demoFilter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class AFilter implements Filter {
    /**
     * 创建之后立即执行,用来做初始化,Filter在服务器启动时就创建
     */
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("AFilter:过滤器出生!");
    }
    /**
     * 每次过滤时都会执行
     */
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        System.out.println("AFilter:拦截成功!");
        chain.doFilter(request, response);
        System.out.println("AFilter:已放行!");
    }
    /**
     * 销毁之前执行,用来对非内存资源进行释放
     */
    public void destroy() {
        System.out.println("AFilter:过滤器死亡!");
    }

}

BFilter:

package demoFilter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class BFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        System.out.println("BFilter:拦截成功!");
        System.out.println("BFilter:已放行!");
    }
}

然后进行web.xml的配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
    id="WebApp_ID" version="4.0">
    <display-name>day041301</display-name>
    <filter>
        <filter-name>AFilter</filter-name>    <!-- 自定义名称 -->
        <filter-class>demoFilter.AFilter</filter-class> <!-- Filter类所在路径 -->
    </filter>
    <filter>
        <filter-name>BFilter</filter-name>    <!-- 自定义名称 -->
        <filter-class>demoFilter.BFilter</filter-class> <!-- Filter类所在路径 -->
    </filter>
    <filter-mapping>
    
        <filter-name>BFilter</filter-name> <!-- 自定义名称匹配 -->
        <url-pattern>/AServlet</url-pattern> <!-- 拦截的资源路径 -->
    </filter-mapping>
    <filter-mapping>
        <filter-name>AFilter</filter-name> <!-- 自定义名称匹配 -->
        <url-pattern>/AServlet</url-pattern> <!-- 拦截的资源路径 -->
    </filter-mapping>
</web-app>

现在是BFilter的<filter-mapping>标签在前,拦截顺序应该是BFilter先进行拦截:

 

浏览器访问AServlet:

查看控制台输出:

 果然是BFilter先拦截。

然后将AFIlter放在BFilter前面试试:

先进行拦截的变成了AFilter。 

 

posted on 2022-04-13 15:06  时间完全不够用啊  阅读(285)  评论(0编辑  收藏  举报