Filter过滤器

1.过滤器介绍
  • 在程序中访问服务器资源时,当一个请求到来,服务器首先判断是否有过滤器与请求资源相关联,如果有,过滤器可以将请求拦截下来,完成一些特定的功能,再由过滤器决定是否交给请求资源。如果没有则像之前那样直接请求资源了。响应也是类似的!
  • 过滤器一般用于完成通用的操作,例如:登录验证、统一编码处理、敏感字符过滤等等
2.Filter过滤器介绍
  • Filter 是一个接口。如果想实现过滤器的功能,必须实现该接口!
  • FilterChain 是一个接口,代表过滤器链对象。由 Servlet 容器提供实现类对象。直接使用即可。过滤器可以定义多个,就会组成过滤器链。如果有多个过滤器,在第一个过滤器中调用下一个过滤器,依次类推。直到到达最终访问资源。如果只有一个过滤器,放行时,就会直接到达最终访问资源。
    在这里插入图片描述
3.Filter过滤器的使用

以拦截后统一处理请求、响应乱码问题作使用
【注:放行之后的代码【servlet走完才会回来走放行之后的代码】】

//过滤器基本使用[防止响应乱码]
//@WebFilter("/*")//拦截路径所有
//@WebFilter({"/ServletDemo1","/ServletDemo2"})
//@WebFilter(urlPatterns={"/ServletDemo1","/ServletDemo2"})
//@WebFilter(servletNames = {"ServletDemo1","ServletDemo2"})//请求servlet都拦截  请求转发的不会拦截 但是经过过滤器不会乱码
@WebFilter(servletNames = {"ServletDemo1"},dispatcherTypes = {DispatcherType.FORWARD,DispatcherType.REQUEST})//请求转发的请求拦截
public class FilterDemo1 implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("FilterDemo1执行了");
        //处理乱码【一定要在放行之前执行】
        servletResponse.setContentType("text/html;charset=utf-8");
        //放行
        filterChain.doFilter(servletRequest,servletResponse);
        //放行之后的代码【servlet走完才会回来走放行之后的代码】
        //System.out.println("放行之后的代码执行了");
    }
}
4.过滤器注解拦截配置
  • 拦截具体资源: /index.jsp
    只有访问index.jsp资源时,过滤器才会被执行
  • 目录拦截【常用】:
    /user/* :访问/user下的所有资源时,过滤器都会被执行
    /* :访问所有资源时,过滤器都会被执行
  • 后缀名拦截: *.jsp
    访问所有后缀名为jsp资源时,过滤器都会被执行
5.过滤器xml配置方式
  • 多个过滤器谁的映射在上面就先执行谁和无关
  • xml和注解同时写则都运行2+2=4
  • 注解的方式在xml后执行
    <filter>
        <filter-name>FilterDemo2</filter-name>
        <filter-class>com.itheima.filter.FilterDemo2</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>FilterDemo2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter>
        <filter-name>FilterDemo1</filter-name>
        <filter-class>com.itheima.filter.FilterDemo1</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>FilterDemo1</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
6.Filter过滤器的生命周期及FilterConfig初始化配置

FilterConfig初始化配置

 <filter>
        <filter-name>FilterDemo3</filter-name>
        <filter-class>com.itheima.filter.FilterDemo3</filter-class>
        <init-param>
            <param-name>username</param-name>
            <param-value>zhangsan</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>FilterDemo3</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

FilterDemo3过滤器生命周期

//过滤器生命周期
//FilterConfig
public class FilterDemo3 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("服务启动时创建过滤器对象");
        //获取过滤器名称
        System.out.println(filterConfig.getFilterName());
        //根据key获取值
        System.out.println(filterConfig.getInitParameter("username"));
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("对象提供服务的过程,执行 doFilter()方法");
    }

    @Override
    public void destroy() {
        System.out.println("服务器关闭或者应用卸载时过滤器对象销毁");
    }
}

打印结果:
---------------------------------------------------------
服务启动时创建过滤器对象
FilterDemo3
zhangsan
FilterDemo1执行了//此处是上面写的过滤器
对象提供服务的过程,执行 doFilter()方法
服务器关闭或者应用卸载时过滤器对象销毁
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陪雨岁岁年年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值