• Filter 笔记


    定义

      过滤器可以拦截所有访问web资源的请求或响应操作。

      是执行过滤任务的Filter对象,这些任务是针对对某一资源(servlet 或静态内容)的请求或来自某一资源的响应执行的,抑或同时针对这两者执行。

    创建步骤

    1. 创建一个类,实现Filter接口
    2. 重写接口中的 doFilter方法,过滤操作的实现
    3. 在web.xml文件中配置 
      注意:在Filter的doFilter方法内如果没有执行chain.doFilter(request,response)那么资源是不会被访问到的。执行了才放行请求

    Filter生命周期

      和servlet类似: 实例化 --> 初始化 --> 服务 --> 销毁

      当服务器启动,会创建Filter对象,并调用init方法,只调用一次。注意:并不是请求时创建,与servlet的默认不同

      服务: 当访问资源时,路径与Filter的拦截路径匹配,会执行Filter中的doFilter方法,这个方法是真正拦截操作的方法.

      销毁: 当服务器关闭时,会调用Filter的destroy方法来进行销毁操作.

    Filter拦截方式

    servlet负责处理请求,filter负责拦截和放行请求。拦截方式四种:

    • REQUEST:直接访问目标资源时执行过滤器。包括:在地址栏中直接访问、表单提交、超链接、重定向,只要在地址栏中可以看到目标资源的路径,就是REQUEST;
    • FORWARD:转发访问执行过滤器。包括RequestDispatcher#forward()方法、< jsp:forward>标签都是转发访问;
    • INCLUDE:包含访问执行过滤器。包括RequestDispatcher#include()方法、< jsp:include>标签都是包含访问;
    • ERROR:当目标资源在web.xml中配置为< error-page>中时,并且真的出现了异常,转发到目标资源时,会执行过滤器

    Filter实例:

      字符编码过滤utf-8

    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 MyFilterConfig implements Filter {
    
        private FilterConfig filterConfig;
    
        @Override
        public void destroy() {
            
        }
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response,
                FilterChain chain) throws IOException, ServletException {
            //通过filterConfig来获取配置信息中的初始化参数
            String encoding = filterConfig.getInitParameter("encoding");
            request.setCharacterEncoding(encoding);
            chain.doFilter(request, response);//放行
            
        }
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            this.filterConfig = filterConfig;
        }
    
    }

    web.xml配置

    <filter>
          <filter-name>MyFilterConfig</filter-name>
          <filter-class>com.jxlg.filter.MyFilterConfig</filter-class>
          <init-param>
              <param-name>encoding</param-name>
              <param-value>UTF-8</param-value>
          </init-param>
      </filter>
      <filter-mapping>
          <filter-name>MyFilterConfig</filter-name>
          <url-pattern>/*</url-pattern>
      </filter-mapping>
  • 相关阅读:
    关于串口通信中数据传输的问题
    DevExpress
    echarts-title
    Echarts配置项概述
    Echarts学习记录
    python学习记录
    JavaScript
    C# ——计时器
    el-upload 上传图片
    view 请求后台接口
  • 原文地址:https://www.cnblogs.com/scmath/p/11185411.html
Copyright © 2020-2023  润新知