zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    struts2解决动态多文件上传的问题(上传文件与数据库字段一一对应)(转)
    Android应用如何开机自启动、自启动失败原因
    android操作ini工具类
    C++#define的用法(含特殊)
    c指针
    WP7备注(34)(UpdateSourceTrigger|ValidatesOnExceptions|NotifyOnValidationError)
    WP7备注(30)(数据绑定基本)
    WP7备注(38)(VisualStateManager)
    WP7备注(39)(ResourceDictionary)
    WP7备注(35)(Vector Graphics|Raster Graphics)
  • 原文地址:https://www.cnblogs.com/scmath/p/11185411.html
Copyright © 2011-2022 走看看