• Servlet过滤器


    Filter可以改变一个request和修改一个response。Filter不是一个Servlet,它不能产生一个response,它能够在一个request到达Servlet之前预处理request,也可以在离开Servlet时处理response。

    一个Filter必须实现javax.servlet.Filter接口并定义三个方法:
        · public void init(FilterConfig config):Filter实例化后进行初始化的回调方法。
        · public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain):处理过滤业务的方法。
        · public void destory():Filter在释放时回调的方法。
    package com.yyq.filter;
    import javax.servlet.*;
    import java.io.IOException;
    /**
     * Created by gao on 16-4-14.
     */
    public class CharacterEncodingFilter implements Filter {
        private FilterConfig filterConfig;
        //Filter初始化时的回调方法
        //FilterConfig接口实例中封装了这个Filter的初始化参数
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            this.filterConfig = filterConfig;
        }
        //主要负责过滤工作
        //FilterChain用于调用过滤器链中的下一个顾虑器
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            //获取此Filter的初始化参数的值
            String encoding = filterConfig.getInitParameter("encoding");
            if (null != encoding && !"".equals(encoding)){
                //设置请求数据的编码方式
                servletRequest.setCharacterEncoding(encoding);
            }
            //把请求和响应对象传给过滤器链中的下一个要调用的过滤器或Servlet
            filterChain.doFilter(servletRequest,servletResponse);
        }
        //此Filter被释放时的回调方法
        @Override
        public void destroy() {
           //
        }
    }

     web.xml注册这个Filter实现类,并配置初始化参数

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/javaee"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
              http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
               version="3.0">
     <!--定义一个过滤器-->
        <filter>
            <!--过滤器的标识名-->
            <filter-name>characterEncodingFilter</filter-name>
            <!--过滤器实现类的全限定名-->
            <filter-class>com.yyq.filter.CharacterEncodingFilter</filter-class>
            <!--配置初始化参数-->
            <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
            </init-param>
        </filter>
        <!--过滤器的映射配置-->
        <filter-mapping>
            <!--过滤器的标识名-->
            <filter-name>characterEncodingFilter</filter-name>
            <!--过滤器的URL匹配模式-->
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    </web-app>
  • 相关阅读:
    基于Canal和Kafka实现MySQL的Binlog近实时同步
    Levenshtein Distance(编辑距离)算法与使用场景
    超强图文|并发编程【等待/通知机制】就是这个feel~
    volatile和synchronized到底啥区别?多图文讲解告诉你
    读《Clean Code 代码整洁之道》之感悟
    小小TODO标识,你用对了吗?
    深入理解JVM(③)判断对象是否还健在?
    深入理解JVM(③)虚拟机的类加载器(双亲委派模型)
    深入理解JVM(③)经典的垃圾收集器
    深入理解JVM(③)HotSpot虚拟机对象探秘
  • 原文地址:https://www.cnblogs.com/yangyquin/p/5427154.html
Copyright © 2020-2023  润新知