zoukankan      html  css  js  c++  java
  • Java之Filter

    一、何为Filter

            Filter也称之为过滤器,它是Servlet技术中比較激动人心的技术。WEB开发者通过Filter技术。对webserver管理的全部web资源。换句话说其主要用于前台向后台传递数据的过滤操作。

            比如Jsp, Servlet,静态图片文件或静态 html文件等进行拦截。从而实现一些特殊的功能。

    比如实现URL级别的权限訪问控制、过滤敏感词汇、压缩响应信息等一些高级能。

    二、在开发中的应用

            首先看一下Filter在项目中的应用。

                 

     

             从图中可见它在web容器和Servletjsp之间,类似于一个过滤器将web传过来的垃圾信息所有过滤掉,然后再传给server。这样提高了一些效率。接下来从代码中看看它是怎么用的:

             1、新建一个类,实现filter接口并实现doFilter()方法

    packagecom.bjpowernode.drp.util.filter;
     
    importjava.io.IOException;
    importjavax.servlet.Filter;
    importjavax.servlet.FilterChain;
    importjavax.servlet.FilterConfig;
    importjavax.servlet.ServletException;
    importjavax.servlet.ServletRequest;
    importjavax.servlet.ServletResponse;
    /**
     * 採用Filter统一处理字符集
     * @author yujie
     *
     */
    public classCharsetEncodingFilter implements Filter {
     
    private Stringendcoding;
     
    publicvoid destroy() {
    }
     
    publicvoid doFilter(ServletRequest request, ServletResponse response,
    FilterChainchain) throws IOException, ServletException {
     
    //System.out.println("CharsetEncodingFilter--->>>begin");
    //设置字符集
    request.setCharacterEncoding(endcoding);
     
    //继续运行
    chain.doFilter(request,response);
     
    //System.out.println("CharsetEncodingFilter--->>>end");
    }
     
    publicvoid init(FilterConfig filterConfig) throws ServletException {
    this.endcoding= filterConfig.getInitParameter("encoding");
    System.out.println("CharsetEncodingFilter.init()-->>endcoding=" + endcoding);
    }
    }

          

      2、在web.xml中进行配置         

      <filter>
    <filter-name>CharsetEncodingFilter</filter-name>
    <filter-class>com.bjpowernode.drp.util.filter.CharsetEncodingFilter</filter-class>
    <init-param>
    <param-name>encoding</param-name>
    <param-value>GBK</param-value>
    </init-param>                
    </filter>        
     
    <filter-mapping>
    <filter-name>CharsetEncodingFilter</filter-name>
    <url-pattern>*.jsp</url-pattern>
    </filter-mapping>

           3、訪问一个页面看看是否能进行控制

    三、深入Filter应用场景

           1>通过控制对chain.doFilter的方法的调用,来决定是否须要訪问目标资源。

    比方,能够在用户权限验证等等。

    推断用户是否有訪问某些资源的权限,有权限放行,没权限不运行chain.doFilter方法。

           2>通过在调用chain.doFilter方法之前,做些处理来达到某些目的。 

    比方,解决中文乱码的问题等等。能够在doFilter方法前,运行设置请求编码与响应的编码。甚至能够对request接口进行封装装饰来处理get请求方式的中文乱码问题(重写对应的request.getParameter方法)

            3>通过在调用chain.doFilter方法之后,做些处理来达到某些目的。

    比方对整个web站点进行压缩。在调用chain.doFilter方法之前用类Aresponse对象进行封装装饰,重写getOutputStream和重写getWriter方法。

    在类A内部中。将输出内容缓存进ByteArrayOutputStream流中,然后在chain.doFilter方法运行后,获取类AByteArrayOutputStream流缓存数据,用GZIPOutputStream流进行压缩下。

    四、Filter生命周期

            简单的一句话和Servlet一样Filter的创建和销毁也是由WEBserver负责。简单步骤例如以下:

            init()->doFilter()->destroy()

    注意:init方法与destroy方法仅仅会运行一次。

    五、总结

          以上就是对Javafilter的简单理解,简单的一句话:filter就是一个过滤器。

    它的功能非常强大。希望在今后的学习中渐渐深入。

  • 相关阅读:
    一类涉及矩阵范数的优化问题
    MATLAB小实例:读取Excel表格中多个Sheet的数据
    深度多视图子空间聚类
    具有协同训练的深度嵌入多视图聚类
    结构深层聚类网络
    一种数据选择偏差下的去相关聚类方法
    shell编程基础二
    shell编程基础一
    如何处理Teamcenter流程回退情况
    汽车行业数字化车间解决方案
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6763135.html
Copyright © 2011-2022 走看看