JavaWeb过滤器Filter学习笔记

Filter可以在servlet这个目标程序之前添加代码,也可以在目标程序执行之后添加代码,之前之后都可以添加过滤规则

一般情况下,都是在过滤器中编写公共代码

怎么实现一个过滤器?

第一步:

编写java类实现一个接口,javax.servlet.Filter,并实现这个接口的所有方法 3个

init方法:在Filter对象第一次被创建后调用,并且只调用一次

doFilter方法:只要用户发送一次请求,则执行一次,发送N次请求,执行N次,这个方法中编写过滤规则

destroy方法:在Filter对象销毁/释放之前调用,并且只调用一次

第二步:

在实现这个Filter接口的类上面加上@WebFilter("/路径")注解

只要某个servlet的路径和@WebFilter("/路径")一致,或者是@WebFilter("/路径")子路径,在执行servlet之前先走这个过滤器

注意:

Servlet对象默认情况下,在服务器启动的时候是不会新建对象的

Filter对象默认情况下,在服务器启动的时候会新建对象

Servlet对象是单例的,Filter对象也是单例的,(单实例,对象只创建一次)

package com.bjpowernode.domain;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebFilter("/b.do")
//@WebFilter("/b.do")精确匹配路径
//@WebFilter("*.do")以*开始模糊匹配路径
//@WebFilter("/b.do/*")前缀匹配
public class MyFilter implements Filter {
    public MyFilter(){
        System.out.println("MyFilter无参数构造方法执行啦");
    }
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("init方法执行啦");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("doFilter方法开始执行啦");
       /*执行下一个过滤器,如果下一个不是过滤器,就执行Servlet
        chain.doFilter这个方法一定要写不写不执行servlet*/
        chain.doFilter(request,response);
        System.out.println("doFilter方法执行啦");
    }
    @Override
    public void destroy() {
        System.out.println("destry方法执行结束啦");
    }
}

JavaWeb过滤器Filter学习笔记_第1张图片

 

你可能感兴趣的:(web)