• Servlet Filter


    Filter :

        Java中的Filter 并不是一个标准的Servlet ,它不能处理用户请求,也不能对客户端生成响应。 主要用于对HttpServletRequest 进行预处理,也可以对HttpServletResponse 进行后处理,是个典型的处理链。

        过滤链的好处是,执行过程中任何时候都可以打断,只要不执行chain.doFilter()就不会再执行后面的过滤器和请求的内容。

    1、filter的驱动:
    在 web 应用程序启动时,web 服务器将根据 web.xml 文件中的配置信息来创建每个注册的 Filter 实例对象,并将其保存在服务器的内存中
    <filter>
      <filter-name>helloFilter</filter-name>
      <filter-class>com.jalja.filter.HelloFilter</filter-class>
    </filter>
    <filter-mapping>
      <filter-name>helloFilter</filter-name>
      <!-- 要拦截的资源 -->
      <url-pattern>/freeMark</url-pattern>
    </filter-mapping>

    2、filter接口:
    //destory() 在Web容器卸载 Filter 对象之前被调用。该方法在Filter的生命周期中仅执行一次。在这个方法中,可以释放过滤器使用的资源。
    public void destroy()

    //Filter 链的执行

    //chain.doFilter(request, response);//把请求传给下一个filter,如果该filter是该filter链的最后一个filter,则把请求给目标资源
    public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain)
    //类似于servlet的init方法,在创建Filter对象时被调用,只调用一次,对当前的filter进行初始化操作,filter单例
    //FilterConfig 类似于servletConfig 可以获得Filter的初始化参数信息
    public void init(FilterConfig filterConfig)

    3、filter 拦截顺序:
      web.xml中配置多个filter时构成filter链,他们的拦截顺序取决于<filter-mapping>的顺序

    4、filter默认过滤的是 请求资源,如果是 其他方式的请求则过滤器无效 ,如果要使用就要在<filter-mapping>中添加<dispatcher>来指定过滤方式

      <dispatcher>REQUEST</dispatcher>

      <dispatcher>FORWARD</dispatcher>
      <dispatcher>INCLUDE</dispatcher>
      <dispatcher>ERROR</dispatcher>

    每天用心记录一点点。内容也许不重要,但习惯很重要!
  • 相关阅读:
    hdu 2485 Destroying the bus stations 迭代加深搜索
    hdu 2487 Ugly Windows 模拟
    hdu 2492 Ping pong 线段树
    hdu 1059 Dividing 多重背包
    hdu 3315 My Brute 费用流,费用最小且代价最小
    第四天 下载网络图片显示
    第三天 单元测试和数据库操作
    第二天 布局文件
    第一天 安卓简介
    Android 获取存储空间
  • 原文地址:https://www.cnblogs.com/jalja/p/5403420.html
Copyright © 2020-2023  润新知