zoukankan      html  css  js  c++  java
  • Javaweb学习笔记9—过滤器

     

    今天来讲javaweb的第9阶段学习。

     

    过滤器,我在本次的思维导图中将过滤器和监听器放在一起总结了,监听器比较简单就不单独写了。

     

    老规矩,首先先用一张思维导图来展现今天的博客内容。

     

       

     

    ps:我的思维是用的xMind画的,如果你对我的思维导图感兴趣并且想看到你们跟详细的备注信息,请点击下载

     

    另外:如果图看不清的话请右击---在新窗口中打开会清楚很多。

     

     

     

     

     

     

    1* 作用:

     

     

     

    用于过滤请求(Request)与响应(Response)的数据内容.

     

    2* 发展:

     

    * Servlet 2.3版本出现Filter功能.

     

    * Servlet 2.4版本对Filter进行补充.

     

    * 目前主流版本为Servlet 2.5.

     

    * 当前最新版本为Servlet 3.0.

     

     

     

     

     

    二* 使用Filter:

     

    1* 自定义过滤器,实现Filter接口,并且重写其提供的方法.

     

     

    2* web.xml文件进行相关配置:

     

     

     

     

    3* 注意:

     

    * 使用<filter-name>标签定义的Filter名称是唯一的.

     

    * 使用<url-pattern>标签定义映射路径允许配置多个,表示同时过滤多个资源(静态或动态).

     

     

     

    三* 生命周期:

     

    1 * 构造函数:

     

    * 用于Filter的实例化.

     

    * 在Filter的生命周期中只能执行一次.

     

    * 线程安全问题(单例多线程的)

     

    2* init()

     

    * 用于Filter的必要初始化工作.

     

    * 在Filter的生命周期中只能执行一次.

     

    3* doFilter()

     

    * 用于Filter的过滤工作.

     

    * 在Filter的生命周期中执行多次(每次拦截每次执行).

     

    4* destroy()

     

    * 用于Filter的资源释放工作.

     

    * 在Filter的生命周期中只能执行一次.

     

    四* 过滤器链:

     

    1* 什么叫做链:

     

        就是多个过滤器同时过滤同一个资源(静态或动态).

     

     

     

    * 控制过滤器链中的过滤器谁先执行:

     

    * 通过web.xml文件中的<filter-mapping>标签出现的先后顺序.

     

    哪个Filter<filter-mapping>标签先出现先执行,后出现后执行.

     

     

     

    2* 过滤器链执行的顺序:

     

    * 如果不是过滤器链的最后一个过滤器,执行chain.doFilter()方法,是发送到下一个过滤器.

     

     

     

    * 如果是过滤器链的最后一个过滤器,执行chain.doFilter()方法,是发送到对应Web资源.

     

     

     

    3* Filter的映射配置:

     

    A* 配置方式:

     

    * 完全匹配:/servlet/test1

     

    * 目录匹配:/servlet/

     

    * 扩展名匹配:*.do

     

     

     

    * 优先级由高到低:完全匹配 -> 目录匹配 -> 扩展名匹配.

     

     

     

     

    B* 过滤Servlet:

     

    如果需要拦截的是Servlet的话,有两种方式配置拦截路径:

     

     

     

    * <url-pattern>Servlet的映射配置</url-pattern>

     

    * <servlet-name>Servlet的名称</servlet-name>

     

    例如:

     

    • 使用<url-pattern>标签:<url-pattern>/hello</url-pattern>
    •  
    • 使用<servlet-name>标签:<servlet-name>HelloServlet</servlet-name>
    •  

     

     

     

     

    C* <dispatcher>标签:

     

    <dispatcher>标签配置到达Servlet的方法,有四种取值:REQUESTFORWARDINCLUDEERROR。可以同时配置多个<dispatcher>标签,如果没有配置<dispatcher>标签,默认为REQUEST。这四种取值的区别如下:

     

    • REQUEST:表示仅当直接请求Servlet时才生效。
    •  
    • FORWARD:表示仅当某Servlet通过FORWARD到该Servlet时才生效。
    •  
    • INCLUDE:JSP中可以通过<jsp:include>标签请求某Servlet或调用RequestDispatcherforward()方法请求某Servlet,仅这种情况下有效。
    •  
    • ERROR:JSP中可以通过<%@ page errorPage="error.jsp">标签指定错误处理页面,仅这种情况下有效。
    •  

     

     

    <url-pattern>标签与<dispatcher>标签的关系是"且"的关系。只有满足<url-pattern>标签的条件,且满足<dispatcher>标签的条件时,当前过滤器才能生效。

     

     

     

    * 实际开发常用方式:

     

    * REQUEST

     

    * FORWARD

     

     

     

     

     

    * Filter的应用案例:

     

    * 全站乱码问题.

     

    * 自动登录案例.

     

    * 禁用缓存案例.

     

    * 权限管理案例 - 粗粒度权限管理.

     

     

     

  • 相关阅读:
    在yii中使用Filter实现RBAC权限自动判断
    关于WEB设计透明和阴影
    一句话扯扯数据结构的概念点
    Console API Google 浏览器开发人员工具使用
    git提交项目时候,忽略一些文件
    学习笔记 如何解决IE6 position:fixed固定定位问题{转载}
    [转载]yii jquery折叠、弹对话框、拖拽、滑动条、ol和ul列表、局部内容切换
    Jquery 常用方法经典总结【砖】
    PHP中冒号、endif、endwhile、endfor这些都是什么
    [转载]救命的PHP代码
  • 原文地址:https://www.cnblogs.com/jinfulin/p/4392901.html
Copyright © 2011-2022 走看看