今天来讲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的方法,有四种取值:REQUEST、FORWARD、INCLUDE和ERROR。可以同时配置多个<dispatcher>标签,如果没有配置<dispatcher>标签,默认为REQUEST。这四种取值的区别如下:

 

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

 

 

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

 

 

 

* 实际开发常用方式:

 

* REQUEST

 

* FORWARD

 

 

 

 

 

* Filter的应用案例:

 

* 全站乱码问题.

 

* 自动登录案例.

 

* 禁用缓存案例.

 

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

 

 

 

最新文章

  1. css规范
  2. 三种Scriptlet总结
  3. 中科大各Linux发行版的更新源列表
  4. [ionic开源项目教程] - 第15讲 ionic用户个人中心登录注册的实现
  5. 【转】使用XCODE 的SOURCE CONTROL 做版本控制 (1)
  6. GoogLeNet学习心得
  7. Java面试08|Java重要的类和相关的方法
  8. 老李分享:持续集成学好jenkins之安装
  9. C#扩展(2):Random的扩展
  10. 【MySQL 读书笔记】当我们在执行更新语句的时候我们在做什么
  11. tp5 修改默认的分页url
  12. TCP协议学习总结(上)
  13. Sublime Text 快捷键列表
  14. MapReduce全局变量之捉虫记
  15. 第14月第23天 uitextfield文字下移
  16. finfo_file
  17. TensorFlow使用基础-Tensor
  18. Python学习1 基础数据类型
  19. spring-framework-3.2.4与hibernate-release-4.3.5下使用HibernateDaoSupport抛出异常
  20. emoj表情过滤

热门文章

  1. fuse的mount机制-流程及参数
  2. BZOJ_4311_向量_线段树按时间分治
  3. BZOJ_4609_[Wf2016]Branch Assignment_决策单调性+带权二分
  4. 「LuoguP4753」濑 River Jumping(贪心
  5. Name That Number
  6. 推荐几本javascript与jquery的好书
  7. C#:template
  8. Codeforces732E Sockets
  9. 洛谷CF1030F Putting Boxes Together(树状数组)
  10. 【UVA - 10474 】Where is the Marble?(排序)