java过滤器Filter讲解

一、概述

(一)简介
Filter:过滤器,是Servlet规范的一种(接口)。过滤器作用在请求到达服务器后,到达目标资源之前,可以对request对象和response对象做一些预处理,之后再放行请求把request和response交给目标资源。
(二)快速入门
1. 创建Java类,实现Filter接口
2. 重写接口的方法(共3个方法,学习3个,重点关注1个:doFilter方法)
3. 把Filter配置到web.xml中

二、Filter的API

(一)Filter的API 1.init(FilterConfig config)
初始化方法,当前过滤器对象被创建时,服务器软件会调用这个方法 参数:FilterConfig
是当前过滤器的配置信息对象,由服务器软件创建并传递进来的。
作用:
1. 获取过滤器的名称 String filtername = config.getFilterName();
2. 获取初始化参数 String value = config.getInitParameter(String name); Enumeration names = config.getInitParameterNames();
3. 获取ServletContext对象 ServletContext context = config.getServletContext(); 2.doFilter(ServletRequest,
ServletResponse, FilterChain) 执行过滤操作的方法,每次拦截到请求时,服务器软件必定会执行这个方法 参数:
ServletRequest:代表http请求的request对象
ServletResponse:代表http响应的response对象
FilterChain:过滤器链对象,里边维护了所有要执行的过滤器的队列
chain.doFilter(request, response);//用来放行请求的 3.destory() 销毁方法,当前过滤器对象被销毁时,服务器软件会调用这个方法 (二)Filter的生命周期
1. Filter对象什么时候创建的? 服务器启动时创建的,创建时会执行init方法,由服务器软件创建的,一个Filter类只有一个对象存在
2. Filter对象什么时候销毁的? 服务器关闭时销毁的,正常销毁时会执行destory方法
3. 每次拦截到请求,必定会执行的方法是哪个? 必定会执行doFilter方法。过滤器的过滤代码要放在doFilter方法里边

三、Filter的配置

<!-- 注册过滤器类 -->
  <filter>
        <!-- filter-name:过滤器的名称,不重复即可 -->
        <filter-name>demo01Filter</filter-name>
        <!-- filter-class:过滤器类的全路径,服务器软件根据这个值通过反射来创建过滤器对象 -->
        <filter-class>com.itheima.filter.Demo01Filter</filter-class>
        <!-- init-param:初始化参数配置,一个过滤器可以有多个初始化参数配置 -->
        <init-param>
               <param-name>aa</param-name>
               <param-value>AA</param-value>
        </init-param>
        <init-param>
               <param-name>bb</param-name>
               <param-value>BB</param-value>
        </init-param>
  </filter>
  <!-- 配置过滤器拦截哪些路径 -->
  <filter-mapping>
        <!-- filter-name:给谁配置拦截的路径 -->
        <filter-name>demo01Filter</filter-name>
        <!--
               url-pattern:过滤器的拦截路径配置
                      1. 完全匹配   /target
                      2. 目录匹配  以/开头, 以*结尾,用的最多
                      3. 扩展名匹配  以*开头,以扩展名结尾

               注意:
                      1. 目录匹配和扩展名匹配不能混用
                      2. 一个过滤器,可以配置多个url-pattern
                      3. 多个过滤器可以拦截同一个请求,过滤器的拦截顺序和url-pattern的顺序有效,谁在前谁先拦截。无关url-pattern优先级
         -->
         <url-pattern>/*</url-pattern>


  <!--
         dispatcher:过滤器的拦截方式。
                REQUEST:默认的拦截方式,拦截客户端发起请求
                FORWARD:拦截请求转发,指的是转发时的请求。
          INCLUDE:拦截动态包含的请求。
       ERROR:拦截错误页面显示的请求。拦截的是在web.xml中配置的error-page标签
  -->
  <dispatcher>FORWARD</dispatcher>
  </filter-mapping>

//补充:web.xml错误页面的配置
  <error-page>
    <error-code>500</error-code>
    <location>/error.jsp</location>
  </error-page>
  <error-page>
    <error-code>404</error-code>
    <location>/404.jsp</location>
  </error-page>

四、过滤器的应用(了解)

  1. 对request和response进行预处理
  2. 公共代码提取
  3. 权限控制 拦截/admin/*,判断如果是管理员放行,否则不放行
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值