zoukankan      html  css  js  c++  java
  • 关于在Servlet中的Fileter

      Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。

    狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
    最早支持Servlet标准的是JavaSoft的Java Web Server,此后,一些其它的基于Java的Web服务器开始支持标准的Servlet。

      Filter,过滤器,是处于客户端与服务器资源文件之间的一道过滤网,在访问资源文件之前,通过一系列的过滤器对请求进行修改、判断等,把不符合规则的请求在中途拦截或修改。也可以对响应进行过滤,拦截或修改响应。

    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到达客户端。

    4.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>有关(谁在前先执行谁)。

  • 相关阅读:
    POJ 2251 Dungeon Master
    HDU 3085 Nightmare Ⅱ
    CodeForces 1060 B Maximum Sum of Digits
    HDU 1166 敌兵布阵(树状数组)
    HDOJ 2050 折线分割平面
    HDU 5879 Cure
    HDU 1878 欧拉回路
    HDU 6225 Little Boxes
    ZOJ 2971 Give Me the Number
    HDU 2680 Choose the best route
  • 原文地址:https://www.cnblogs.com/Alei777/p/10591729.html
Copyright © 2011-2022 走看看