今天来讲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的应用案例:

 

* 全站乱码问题.

 

* 自动登录案例.

 

* 禁用缓存案例.

 

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

 

 

 

Javaweb学习笔记9—过滤器的更多相关文章

  1. JavaWeb学习笔记九 过滤器、注解

    过滤器Filter filter是对客户端访问资源的过滤,符合条件放行,不符合条件不放行,并且可以对目标资源访问前后进行逻辑处理. 步骤: 编写一个过滤器的类实现Filter接口 实现接口中尚未实现的 ...

  2. JavaWeb学习笔记总结 目录篇

    JavaWeb学习笔记一: XML解析 JavaWeb学习笔记二 Http协议和Tomcat服务器 JavaWeb学习笔记三 Servlet JavaWeb学习笔记四 request&resp ...

  3. javaweb学习笔记整理补课

    javaweb学习笔记整理补课 * JavaWeb: * 使用Java语言开发基于互联网的项目 * 软件架构: 1. C/S: Client/Server 客户端/服务器端 * 在用户本地有一个客户端 ...

  4. 【JAVAWEB学习笔记】06_jQuery基础

    接05的学习笔记. 四.使用JQ完成省市二级联动 1.需求分析 使用jquery完成省市二级联动 2.技术分析 2.1数组的遍历操作 方式一: $(function(){ // 全选/ 全不选 $(& ...

  5. javaweb学习笔记(二)

    一.javaweb学习是所需要的细节 1.Cookie的注意点 ① Cookie一旦创建,它的名称就不能更改,Cookie的值可以为任意值,创建后允许被修改. ② 关于Cookie中的setMaxAg ...

  6. Javaweb学习笔记(一)

    一.javaweb学习是所需要的细节 1.发送响应头相关的方法 1).addHeader()与setHeader()都是设置HTTP协议的响应头字段,区别是addHeader()方法可以增加同名的响应 ...

  7. day68—angularJS学习笔记之-过滤器

    转行学开发,代码100天——2018-05-23 今天学习angularJS的过滤器的使用. angular中的常用过滤器用来修改数据格式,主要有以下几类: 1.大写,| uppercase 2.小写 ...

  8. Javaweb学习笔记——(二十一)——————过滤器

    过滤器     过滤器概述         1.什么是过滤器:             过滤器javaweb三大组件之一,它与Serlvet很相似,不过它过滤器是用来拦截请求的,而不是处理       ...

  9. 学习笔记_过滤器详细(过滤器JavaWeb三大组件之一)

    过滤器详细 1 过滤器的生命周期 我们已经学习过Servlet的生命周期,那么Filter的生命周期也就没有什么难度了! (l)  init(FilterConfig):在服务器启动时会创建Filte ...

随机推荐

  1. Linux:外网域名防火墙设置导致下载失败

    问题现象: 通过IE从服务器下载文件时,提示Can't read from connection: Connection reset by peer. 别的现场都是好的,只有该现场有这个问题.所以,一 ...

  2. SPOJ:Divisors of factorial (hard) (唯一分解&分块优化)

    Factorial numbers are getting big very soon, you'll have to compute the number of divisors of such h ...

  3. JAVA 集合JGL

    集合 Java提供了四种类型的“集合类”:Vector(矢量).BitSet(位集).Stack(堆栈)以及Hashtable(散列表).与拥有集合功能的其他语言相比,尽管这儿的数量显得相当少,但仍然 ...

  4. XCode10 swift4.2 适配遇到的坑

    以下是2018年10月23日更新 经过大约一个月的时间的适配,项目正式使用XCode10(以下简称为10 or XC10)大部分库都升级为Swift4.2(以下简称为 4.2 or S4.2),下面是 ...

  5. Codeforces - 1117E - Crisp String - 进制 - 交互

    https://codeforces.com/problemset/problem/1117/E 就用abc表示数字来给每个数编码,编完直接问出移动的结果,反构造就行了,比C和D还简单. #inclu ...

  6. POJ2370【水题】

    //#include <bits/stdc++.h> #include<iostream> #include<string.h> #include<cstdi ...

  7. 基于FBX SDK的FBX模型解析与加载 -(二)

    http://blog.csdn.net/bugrunner/article/details/7211515 5. 加载材质 Material是一个模型渲染时必不可少的部分,当然,这些信息也被存到了F ...

  8. cocos2d-html5基础

    1 环境搭建 版本Cocos2d-html5-v2.2,tomcat7.0 配置tomcat,然后直接解压Cocos2d-html5-v2.2.zip,访问解压后的根目录的index.html就可以看 ...

  9. bzoj 2565: 最长双回文串【manacher+线段树】

    因为我很愚蠢所以用了很愚蠢的O(nlogn)的manacher+线段树做法 就是开两个线段树mn和mx分别表示左端点在i的最长回文子串和右端点在i的最长回文子串 用manacher求出每个点的最长回文 ...

  10. Hibernate中表与表之间的关联多对多,级联保存,级联删除

    第一步:创建两个实体类:用户和角色实体类,多对多关系,并让两个实体类之间互相关联: 用户实体类: package com.yinfu.entity; import java.util.HashSet; ...