当前课程知识点:Web后端开发技术 >  第7章 Filter和Listener >  7.1 过滤器 >  7.1.1过滤器(1)

返回《Web后端开发技术》慕课在线视频课程列表

7.1.1过滤器(1)在线视频

下一节:7.1.2过滤器(2)

返回《Web后端开发技术》慕课在线视频列表

7.1.1过滤器(1)课程教案、知识点、字幕

同学们好

欢迎回来继续学习web后端开发技术

在这一小节当中

我们将学习过滤器核心接口与配置

通过之前的课程

我们知道当浏览器发送一个请求

到达web容器的时候

由web容器创建请求对象和响应对象

然后递交给相应的web组件

实现相应的业务逻辑

最后将结果直接返回给客户端

那么

当我们在项目当中加入了过滤器以后

它的工作过程是什么样的呢

当我们在项目当中加入过滤器以后

一个请求到达Web容器

那么Web容器将会根据过滤的条件

来检查当前请求

是否要经过过滤器

如果不需要经过那么容器

将请求直接递交给目标资源

如果这个请求符合过滤的条件

那么它就要先经过过滤器

进行一个前处理

前处理

你比如检查一下用户请求的资源

是否具有相应的访问权限

还可以对请求的内容做修改

经过前处理以后

再把请求递交给web组件进行相应的

业务处理

那么处理完以后

那么这个结果并不是直接返回给

客户端

而是还要经过过滤器进行后处理

后处理

你比如对想的内容做算法上的压缩

处理

最后由web容器将结果返回给客户端

那么这就是过滤器它的执行过程

当在开发当中

我们使用的过滤器可能不止一个

那么

有多个构成的过滤器

我们把它叫做过滤器链

在这里我们设立了两个过滤器

它们构成了一个过滤器链

对于每一个过滤器

它的代码可以分为这么三部分

一部分代码叫作前处理

第二部分

我们这里写的是chain.doFilter

它的作用是要调用下一个过滤器

第3部分代码叫做后处理

那么下面我们看一下一个请求

经过过滤器链的执行过程

当请求经过过滤器的时候

首先要经过前处理

前处理完成以后

由chain.doFilter调用下一个

过滤器

到达下一个过滤器

还要进行前处理

前处理完成以后

由chain.doFilter

调用下一个过滤器

如果当前的过滤器是最后一个过滤器

那么它就会将请求递交给目标资源

那么目标资源处理完业务以后

它的返回首先要将结果返回给最后

一个过滤器

进行后处理

然后再把请求依次向前传递

到达前一个过滤器的后处理

最后将结果返回给客户端

那么这就是过滤器链的执行过程

过滤器的实现主要依赖这样三个接口

第1个

javax.servlet.Filter接口

第2个

javax.servlet.FilterConfig接口

第3个接口叫做

javax.servlet.Chain接口

下面我们逐一对这三个接口进行一个

简单的介绍

首先我们看一下Filter接口

那么Filter接口包含了三个

方法

第1个方法叫init方法

在这个方法当中

我们看到有一个filterConfig

对象

它的作用是实现容器的初始化

那么这个方法是由容器来调用的

类似于servlet当中的init方法

第2个方法叫做doFilter

它里面有三个参数

第1个参数是ServletRequest

第2个参数是ServletResponse

第3个参数叫做FilterChain

它的作用是当请求经过时

由容器调用这个方法

对请求和响应进行相应的处理

这里面FilterChain对象的

doFilter方法

将负责请求传递给下一个过滤器

如果他是最后一个过滤器

那么将请求递交给目标资源

第3个方法叫做destroy

它的作用是当

过滤器生命周期结束前

由容器调用这个方法

释放相应的资源

通过这个表格我们知道

过滤器接口这三个方法

它是对过滤器生命周期的

管理的三个方法

接下来我们介绍一下过滤区的生命周期

首先是创建

那么这个创建是由容器来创建过滤器

对象

接下来是初始化由容器

调用init方法来实现过滤器的

初始化

第3个

doFilter

那么在doFilter方法当中

要实现对请求的过滤

那么同学们会想到

如果是一个过滤器链

那么过滤器链上面的过滤器

它的执行顺序是如何而定的

类似于

servlet

过滤器它也有两种配置方式

一种方式是通过注解方式进行配置

另外一种是通过web.xml

进行配置

在这两种方式下

过滤器链当中的过滤器的执行顺序是

不一样的

下面我们说一下它的执行顺序

对于注解配置

我们使用的是@WebFliter

它里面有个属性叫做filterName

那么这个属性会对应于

一个过滤器的类

在这种情况下

会按照字符的顺序执行过滤器

对应于web.xml

这种配置

当中有一个filter-mapping的顺序

过滤器是按照这个顺序来执行

过滤器

那么在过滤器执行过程当中

我们在编写代码的时候

有三种处理方式

第1种处理方式是向客户端返回响应信息

第2种处理方式是将请求发给下一个

过滤器或者是目标资源

第3种处理方式

将请求进行转发或者是重定向到其他

资源上面去

最后一个生命周期就是销毁

由容器调用destroy方法

释放相应的资源

接下来我们介绍一下FilterConfig接口

那么这个接口由容器实现

它主要作用是获取过滤器

初始化参数和应用的上下文

我们看一下接口相关的方法

第1个方法是getFilterName

用于获取过滤器的名字

第2个叫做getInitParameter

获取过滤器的初始化参数

第3个方法叫做getInitParameterNames

获取过滤器的

所有的初始化参数名

下面这个方法是用于获取

servlet

上下文对象

第3个接口

FilterChain接口

它的作用是将其实例作为参数传递给

过滤器的

doFilter方法

过滤器使用这个对象

调用下一个过滤器

那么这个接口也是由容器来实现的

我们看一下它里面的方法

这个方法只有一个

它里面有两个参数

一个是ServletRequest

另外一个是ServletResponse

它的作用就是调用下一个过滤器

如果当前的过滤器是最后一个

那么它将调用目标资源

接下来我们介绍一下过滤器的配置

刚才我们已经提到了

过滤器有两种配置的方式

那么这个前提条件

这里面进一步明确一下

它使用的是Servlet3.0以上这种

版本

在这种版本之上可以使用

注解配置

还可以通过web.xml进行

配置

下面我们就把关于注解配置当中的

属性给大家做一个简单的介绍

第1个属性名叫做FilterName

这个很容易理解

就是过滤器的名字

这是一个不是必选项

接下来是urlPatterns或者是value

这是一个必选项

它是指定一组过滤器的url匹配模式

换句话说

它需要指定对哪些请求的资源进行

过滤或者叫拦截

它可以使用两种匹配的模式

一种是路径匹配

一种是扩展名匹配

接下来是servletNames

也就是说在过滤器当中通过属性来

指定

对哪些servlet来进行过滤

那么这里面需要提供servlet

当中的Names的属性值

servlet可以有多个

下面这个参数是关于请求模式的

因为请求模式有request

forward include error

还有async

那么在过滤器当中通过参数名来指定

对哪种类型的请求进行过滤

默认的是对request类型的请求进行过滤

接下来属性名叫做initParams

它的作用是指定一组过滤器的初始化

参数

接下来参数名的作用是指定过滤器

是否支持异步的模式

接下来是description描述

过滤器

displayName

过滤器的显示名

我们需要注意的是

这里面最关键的就是关于url匹配

模式

刚才我们已经提到了

有两种

一种是路径匹配

例如这种写法

那么这个写法是对所有的资源的都要

进行过滤

这是一个星号

第2种写法是扩展名的匹配

如*.jsp

也就是说它会对所有请求文件扩展

名为.jsp的文件

进行过滤

这里面说了不可以是两者的混合使用

比如这种形式是不允许的

下面我们看一个使用注解方式配置的

过滤器

逐一给大家做一个简单介绍

上面是过滤器的描述

过滤器的显示的名称

过滤器的名字

TestFiter

接下来指出了对哪种类型的资源进行

过滤

这里面写的是*.jsp

也就是说当我们访问一个JSP文件

的时候

都要经过这个过滤器

还有servletName指定了

对哪个servlet进行过滤

这里提到了对TestServlet

进行过滤

其他的servlet就放行了

接下来这个是初始化参数

初始化参数我们看到它的名字是CharacterEncoding

字符编码

它的值是UTF-8

请求的类型这里面我们看到是request

那么过滤器综合起来可以这样来说

它会对请求类型为request这种请求

资源的扩展名

为.jsp的这种资源以及名字为

TestServlet

这种Servlet进行过滤

或者说进行拦截

接下来我们看一下刚才配置过滤器的

实现代码

在这个实现代码当中我们看到

有两部分

第一部分是过滤前的处理

那么当符合条件的请求到达过滤器以后

首先要经过过滤前的处理

那么这段代码执行以后

它将执行下面这行代码

chain.doFilter

将请求递交给相应的

TestServlet

或者是JSP文件

当目标资源执行完相应的业务逻辑

以后

程序将回到这里继续进行运行

这个是需要大家一定注意的

刚才我们已经提到

过滤器它有两种配置方式

一种是注解配置

第2种就是在web.xml中

进行配置

下面给大家做一个简单的介绍

在web.xml中配置它需要用到两个元素

一个元素叫做filter

第2个元素是filter-mapping

在filter元素当中又包含了多个

子元素

第1个是描述

第2个是显示名称

第3个是过滤器的名字叫TestFilter

接下来这个子元素是filter-class

也就是说你这个过滤器名所对应的

这个类到底是哪个类

这里面要写全限定名

下面指定了过滤区的初始化参数

在filter-mapping元素当中

又包含了多个子元素

第1个子元素是filterName

那么这个name一定要和上面的filterName是

完全一致的

接下来是它的匹配模式

所有的JSP进行匹配

再下边这个子元素是指定了

哪个servlet进行匹配

在下边元素指明了是对哪种请求的

类型进行匹配

我们看这些元素它的属性名称和在

注解配置当中的属性

名称基本上是一样的

Web后端开发技术课程列表:

第1章 Java Web开发准备

-1.0 导学

--1.0.1 导学

-1.1 Web应用开发概述

--1.1.1 Web应用简介

--1.1.2 Web开发技术

--1.1.3 测试

-1.2 准备Java Web应用开发环境

--1.2.1 准备Java Web应用开发环境

--1.2.2 测试

--1.2.3 谈谈JavaWeb优势和学习方法

-1.3 任务实现:Hello World Web项目

--1.3.1 Hello World Web项目

--1.3.2 测试

-1.4 小结

--1.4.1 小结

-本课程所有代码

--课程参考代码

第2章 Servlet技术基础

-2.0 导学

--2.0.1 导学

-2.1 Servlet概述

--2.1.1 Servlet简介

--2.1.2 Servlet API

--2.1.3 测试

-2.2 创建Servlet

--2.2.1 Hello Servlet

--2.2.2 Servlet配置

--2,2,3 作业

-2.3 Servlet应用

--2.3.1 处理超链接请求

--2.3.2 处理form表单请求

--2.3.3 处理结果

--2.3.4 测试

-2.4 任务实现:某高校毕业生信息发布系统-注册与登录(Servlet版)

--2.4.1 注册代码实现

--2.4.2 登录代码实现

--2.4.3 测试

--2.4.4谈一谈jQuery前端开发框架

-2.5 ServletConfig接口

--2.5.1 ServletConfig接口

-2.6 ServletContext接口

--2.6.1 ServletContext接口

-2.7 HttpServletRequest接口

--2.7.1 获取请求报文信息

--2.7.2 上传照片

--2.7.3 获取网络连接信息

--2.7.4 存取请求域属性

--2.7.5 测验

--2.7.6 在请求转发和重定向过程中传递数据

-2.8 HttpServletResponse接口

--2.8.1 HttpServletResponse接口

--2.8.2 输出服务器端图片

--2.8.3 测试

-2.9 任务实现:某高校毕业生信息发布系统-简历添加

--2.9.1 任务实现:某高校毕业生信息发布系统-简历添加

-2.10 小结

--2.10.1 小结

-动画演示:Java Web应用服务器处理客户端请求的过程

--Java Web应用服务器处理客户端请求的过程

第3章 会话跟踪

-3.0 导学

--3.0.1 导学

-3.1 Cookie技术

--3.1.1 Cookie技术概述

--3.1.2 Cookie技术应用-自动登录

--3.1.3 测试

-3.2 Session技术

--3.2.1 Session技术概述

--3.2.2 Session技术-Session技术应用购物车

--3.2.3 测试

-3.3 URL重写与隐藏表单域

--3.3.1 URL重写技术与隐藏表单域

--3.3.2 测试

-3.4 任务实现:某高校毕业生信息发布系统-简历修改

--3.4.1 任务实现:某高校毕业生信息发布系统-简历修改

--3.4.2 讨论会话跟踪技术的应用场景

-3.5 小结

--3.5.1 小结

第4章 JSP基础

-4.0 导学

--4.0.1 JSP导学

-4.1 jsp概述

--4.1.1 JSP概述

--4.1.2 测试

-4.2 脚本元素

--4.2.1 脚本元素

--4.2.2 测试

-4.3 指令元素

--4.3.1 指令元素

--4.3.2 测试

-4.4 动作元素

--4.4.1 动作元素

--4.4.3 测试

-4.5 内置对象

--4.5.1 内置对象(1)

--4.5.2 内置对象(2)

--4.5.3 测试

-4.6 JavaBean

--4.6.1 JavaBean概述

--4.6.2 分步注册

--4.6.3 测试

-4.7 任务实现:某高校毕业生信息发布系统-首页(JSP版)

--4.7.1 任务实现:某高校毕业生信息发布系统-首页(JSP版)

--4.7.2 在JSP页面显示内容的都有哪些方法

-4.8 小结

--4.8.1 小结

第5章 表达式语言

-5.0 导学

--5.0.1 表达式语言

--5.0.2 测试

-5.1 el语法

--5.1.1 EL语法

--5.1.2 测试

-5.2 el隐含对象

--5.2.1 EL隐含对象

--5.2.2 测试

-5.3 任务实现:某高校毕业生信息发布系统-学生详细信息展示

--5.3.1 任务实现:某高校毕业生信息发布系统-学生详细信息展示

--5.3.2 测试

-5.4 小结

--5.4.1 小结

--5.4.2 讨论el表达式的优势

第6章 标准标签库

-6.0 导学

--6.0.1 标准标签库

--6.0.2 测试

-6.1 核心标签库

--6.1.1 通用标签

--6.1.2 条件标签

--6.1.3 迭代标签

--6.1.4 URL标签

--6.1.5 测试

-6.2 任务实现:某高校毕业生信息发布系统-首页(JSTL版)

--6.2.1 任务实现:某高校毕业生信息发布系统-首页(JSTL版)

--6.2.2 测试

-6.3 小结

--6.3.1 小结

--6.3.2 讨论如何实现自定义标签

第7章 Filter和Listener

-7.0 导学

--7.0_导学

-7.1 过滤器

--7.1.1过滤器(1)

--7.1.2过滤器(2)

--7.1.3 测试

-7.2 监听器

--7.2.1.1与ServletContext相关的监听器

--7.2.1.2示例:访问网站计数功能

--7.2.2.1与Session相关的监听器

--7.2.2.2示例:显示在线用户名称

--7.2.3.1与Request相关的监听器

--7.2.3.2示例:实时显示访问网站用户信息示例

--7.2.4 测试

-7.3 任务实现:某高校毕业生信息发布系统-单态登录

--7.3.1 任务实现:某高校毕业生信息发布系统-单态登录

--7.3.2 测试

-7.4 小结

--7.4.1小结

--7.4.2讨论filter和listener使用场景

第8章 JDBC

-8.0 导学

--8.0_导学

-8.1 JDBC API

--8.1.1 JDBC API

--8.1.2 测试

-8.2 JDBC API访问MySQL基本步骤

--8.2.1 JDBC API

--8.2.2 测试

-8.3 任务实现:某高校毕业生信息发布系统-注册与登录

--8.3.1 任务实现:某高校毕业生信息发布系统-注册与登录(JDBC版)

--8.3.2 测试

-8.4 小结

--8.4.1小结

--8.4.2 讨论JDBC工具类

第9章 某高校毕业生信息发布系统开发

-9.0导学

--9.0导学

-9.1 技术准备

--9.1.1技术准备-MVC模式

--9.1.2技术准备-Ajax技术

--9.1.3技术准备-jQuery对Ajax的实现

--9.1.4_技术准备- JDBC工具类

--9.1.5 测试.

-9.2 系统设计

--9.2系统设计:某高校毕业生信息发布系统开发

-9.3 系统实现

--9.3.1完善登陆和注册功能

--9.3.2完善简历添加功能

--9.3.3完善简历修改功能

--9.3.4.1首页分页显示

--9.3.4.2首页分页显示

-9.4 小结

--9.4.1小结

--9.4.2讨论:分页组件

7.1.1过滤器(1)笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。