• Servlet Filter详细讲


    Filter,过滤器,顾名思义,即是对数据等的过滤,预处理过程。为什么要引入过滤器呢?在平常访问网站的时候,有时候发一些敏感的信息,发出后显示时 就会将敏感信息用*等字符替代,这就是用过滤器对信息进行了处理。这只是一个简单的例子,当然,过滤器那么强大,它的功能也不可能局限于此,它不仅能预处 理数据,只要是发送过来的请求它都是可以预处理的,同时,它还可以对服务器返回的响应进行预处理,这样,大大减轻了服务器的压力。例如,实现URL级别的 权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。下面来详细介绍一下过滤器。

    1.概念

       过滤作用,对从客户端向服务器端发送的请求进行过滤,也可以对服务器端返回的响应进行处理。它使用户可以改变一个request和修改一个 response.。Filter 不是一个servlet,它不能产生一个response,但是它能够在一个request到达servlet之前预处理request,也可以在 response离开servlet时处理response。换句话说,filter其实是客户端与servlet中间的一个传递者,并且它可以对要传递 的东西进行修改

    注意:过滤器是用来拦截请求和响应的,不能产生响应,而servlet是用来处理请求并产生响应。

    2.适用场合

      实现URL级别的权限访问控制,过滤敏感词汇,压缩响应信息等。

    3.过滤器如何实现拦截

    • 当客户端发生请求后,在HttpServletRequest 到达Servlet 之前,过滤器拦截客户的HttpServletRequest 。 
    • 根据需要检查HttpServletRequest ,也可以修改HttpServletRequest 头和数据。 
    • 在过滤器中调用doFilter方法,对请求放行。请求到达Servlet后,对请求进行处理并产生HttpServletResponse发送给客户端。
    • 在HttpServletResponse 到达客户端之前,过滤器拦截HttpServletResponse 。 
    • 根据需要检查HttpServletResponse ,可以修改HttpServletResponse 头和数据。
    • 最后,HttpServletResponse到达客户端。
    • .Filter接口

        Servlet API提供了一个Filter接口,编写的过滤器必须实现该接口。

       5.Filter的生命周期

      (1)Filter接口中有三个重要的方法。

      • init()方法:初始化参数,在创建Filter时自动调用。当我们需要设置初始化参数的时候,可以写到该方法中。
      • doFilter()方法:拦截到要执行的请求时,doFilter就会执行。这里面写我们对请求和响应的预处理。
      • destroy()方法:在销毁Filter时自动调用。

       (2)Filter的生命周期

          Filter的创建和销毁由web服务器控制。

      • 服务器启动的时候,web服务器创建Filter的实例对象,并调用其init方法,完成对象的初始化功能。filter对象只会创建一次,init方法也只会执行一次。
      • 拦截到请求时,执行doFilter方法。可以执行多次。
      • 服务器关闭时,web服务器销毁Filter的实例对象。

       6.Filter对象——FilterConfig

        用 户在配置filter时,可以使用<init-param>为filter配置一些初始化参数,当web容器实例化Filter对象,调用其 init方法时,会把封装了filter初始化参数的filterConfig对象传递进来。因此开发人员在编写filter时,通过 filterConfig对象的方法,就可获得:

      • String getFilterName():得到filter的名称。
      • String getInitParameter(String name): 返回在部署描述中指定名称的初始化参数的值。如果不存在返回null.
      • Enumeration getInitParameterNames():返回过滤器的所有初始化参数的名字的枚举集合。
      • public ServletContext getServletContext():返回Servlet上下文对象的引用。

       7.过滤器链——FilterChain

        一组过滤器对某些web资源进行拦截,那么这组过滤器就称为过滤器链。过滤器的执行顺序和<filter-mapping>有关(谁在前先执行谁)。

  • 相关阅读:
    服务器状态码
    QuerySet中添加Extra进行SQL查询
    django配置一个网站建设
    MySQL数据库查询中的特殊命令
    125. Valid Palindrome
    121. Best Time to Buy and Sell Stock
    117. Populating Next Right Pointers in Each Node II
    98. Validate Binary Search Tree
    91. Decode Ways
    90. Subsets II
  • 原文地址:https://www.cnblogs.com/wdyaoyao/p/10636296.html
Copyright © 2020-2023  润新知