zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    java包装类的缓存机制(转)
    分布式事务的思考(转)
    分布式事务框架介绍与使用案例
    java 内部类、匿名内部类
    spring cloud应用
    Oralce学习笔记(六)
    部署CentOS虚拟机集群
    商品详情页系统架构
    Oracle学习笔记(五)
    hystrix完成对redis访问的资源隔离
  • 原文地址:https://www.cnblogs.com/yangyquin/p/5427154.html
Copyright © 2011-2022 走看看