Filter(1)—基础知识
一、过滤器(Filter)
1.概述:
JavaWeb的一个重要组件,可以对请求和响应拦截
Filter的基本功能是对Servlet容器调用Servlet过程中进行拦截,从而在Servlet进行响应处理的前后实现一些特殊
的功能。
Filter程序是一个实现了Filter接口的Java类,与Servlet程序相似,它由Servlet容器进行调用和执行。
Filter程序需要在web.xml文件中进行注册和设置它所要拦截的资源。
Filter程序可以拦截JSP、Servlet、静态图片文件、和静态HTML文件
2.接口:Filter、Filterchain、FilterConfig。
3.工作原理:
当在web.xml中注册了一个Filter来对某个Servlet程序进行拦截处理时,这个Filter就成了Servlet容器和Servlet
程序的通信线路上的一道关卡,该Filter可以对Servlet容器发送给Serrvlet程序的请求和Servlet程序回送给Servlet容器的
响应信息进行拦截,可以决定是否继续将请求传递给Servlet程序,以及对请求和响应信息是否进行修改。
在一个web应用可以注册多个Filter程序,每个Servlet可以对一个或一组Servlet程序进行拦截。
若有多个Filter程序对某个Servlet程序的访问过程进行拦截,当针对该Servlet的请求到达时,web容器对将把这多个Filter
程序组合一个Filter链(过滤器链),Filter链中各个Filter拦截顺序与他们在应用程序web.xml中映射的顺序一致。
4.创建一个简单的Filter
创建一个继承Filter接口的Java类,在web.xml中注册并配置,其中<url-pattern>指定该Filter可以拦截那些资源,
即,可以通过哪些url访问该Filter。
映射Filter,<filter-mapping>元素用于设置一个Filter所拦截的元素。
<filter-mapping>
<filter-name></filter-name>:用于设置filter的注册名称,该值必须是在<filter>元素中声明过的
<url-pattern></url-pattern>:设置filter所拦截的请求路径(过滤器关联的url样式)
<servlet-name></servlet-name>:指定过滤器所拦截的Servlet名称
<dispatcher></dispatcher>:指定过滤器所拦截的资源被Servlet容器调用的方式,可以设置多个<dispatcher>
子元素用来指定Filter对资源的多种调用方式进行拦截,其值:request(默认)、include、forward、error
</filter-mapping>
<dispatcher>其值的含义:
request:当用户直接访问页面时,web容器将会调用过滤器,如果目标资源是通过RequestDispatcher的include()
或forword()方法访问时,那么该过滤器就不会被调用。即get或post请求
include:如果目标资源是通过RequestDispatcher的include()方法访问时,该过滤器才会被调用,除此之外,
不会被调用,即<jsp:forward page=""/>、<%@ page errorPage=""%>
forward:如果目标资源是通过RequestDispatcher的forward()方法访问时,该过滤器才会被调用,除此之外,
不会被调用,即<jsp:include=""/>
error:如果目标资源是通过声明式异常处理机制调用时,那么过滤器将会被调用,除此之外,过滤器不会被调用。
即在webx.xml中声明节点:
<error-page>
<exception-type>java.lang.ArithmeticException</exception-type>
<location>/demo1/test.jsp</location>
</error-page>
拦截方式:
①、Servlet名称
②、资源访问的请求路径(url样式)
5.相关的API
Filter接口:
①init(FilterConfig filterConfig):类似于Servlet的init()方法,在创建Filter对象之后,立即被调用,且只
被调用一次,Filter对象在Servlet容器加载当前web应用时被创建。Filter对象是单例的。
>FilterConfig类似于Servlet的ServletConfig,可以在webx.xml文件中配置Filter的初始化参数,
配置方式也和Servlet类似
②doFilter(ServletRequest request, ServletResponse response,
FilterChain chain):真正进行拦截的代码,每次拦截都会调用该方法。
>FilterChain:Filter链,多个FIlter链可以构成一个Filter
>doFilter:把请求传给FIlter链的下一个Filter,若当前Filter没有下一个Filter,就把请求给目标Servlet(JSP)
>Filter链的执行顺序是按照web.xml中Filter的<filter-mapping>的书写顺序执行。
注意:Filter链执行顺序:web.xml配置的第一个Filter先执行,不管第一个Filter代码有没有执行完,只要
遇到doFilter()就把控制权交给下一个Filter,直到下一个Filter代码执行遇到doFilter(),控制权继续
下移,若这是Filter链上最后一个Filter,则执行Servlet或JSP,再执行最后一个Filter中doFilter之后
的代码,控制权再向上移,直到第一个Filter,最后执行第一个Filter doFilter()中doFilter之后的代码。
③destroy()
6.自定义一个Filter抽象类
Filter(1)—基础知识的更多相关文章
- Spring基础知识
Spring基础知识 利用spring完成松耦合 接口 public interface IOutputGenerator { public void generateOutput(); } 实现类 ...
- ReactiveCocoa基础知识内容
本文记录一些关于学习ReactiveCocoa基础知识内容,对于ReactiveCocoa相关的概念如果不了解可以网上搜索:RACSignal有很多方法可以来订阅不同的事件类型,ReactiveCoc ...
- jQuery学习笔记 - 基础知识扫盲入门篇
jQuery学习笔记 - 基础知识扫盲入门篇 2013-06-16 18:42 by 全新时代, 11 阅读, 0 评论, 收藏, 编辑 1.为什么要使用jQuery? 提供了强大的功能函数解决浏览器 ...
- Struts2入门1 Struts2基础知识
Struts2入门1 Struts2基础知识 20131130 代码下载: 链接: http://pan.baidu.com/s/11mYG1 密码: aua5 前言: 之前学习了Spring和Hib ...
- css+div网页设计(一)--基础知识
css是网页制作不可缺少的部分,我会用三篇博客为大家展示css的基本用法. 关于css+div的整体结构图总结如下: 本篇博客主要介绍css的基础知识. 一.css概念; css(级联样式表):它是一 ...
- 1.进入debug模式(基础知识列表)
1.进入debug模式(基础知识列表)1.设置断点 2.启动servers端的debug模式 3.运行程序,在后台遇到断点时,进入debug调试状态 ========================= ...
- 《Programming Hive》读书笔记(两)Hive基础知识
<Programming Hive>读书笔记(两)Hive基础知识 :第一遍读是浏览.建立知识索引,由于有些知识不一定能用到,知道就好.感兴趣的部分能够多研究. 以后用的时候再具体看.并结 ...
- 【OGG】OGG基础知识整理
[OGG]OGG基础知识整理 一.GoldenGate介绍 GoldenGate软件是一种基于日志的结构化数据复制软件.GoldenGate 能够实现大量交易数据的实时捕捉.变换和投递,实现源数据库与 ...
- Shiro第一篇【Shiro的基础知识、回顾URL拦截】
Shiro基础知识 在学习Shiro这个框架之前,首先我们要先了解Shiro需要的基础知识:权限管理 什么是权限管理? 只要有用户参与的系统一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安 ...
随机推荐
- jloi2015
题解: [JLOI2015]管道连接 这个很水 比较裸的斯坦纳树dp 斯坦纳树dp就是 g[i][j]表示当前在i点,状态为j 然后转移分为两种 g[i][j]=g[i][k]+g[i][k^j] 另 ...
- 伪分布式hbase从0.94.11版本升级stable的1.4.9版本
Hbase从0.94.11升级到stable的1.4.9版本: 升级思路: hadoop1.1.2 hbase 0.94.11 ↓ had ...
- Vijos1982 NOIP2015Day2T2 子串 substring 动态规划
子串 (substring.cpp/c/pas) 题目链接 [问题描述]有两个仅包含小写英文字母的字符串 A 和 B.现在要从字符串 A 中取出 k 个 互不重叠 的非空子串,然后把这 k 个子串按照 ...
- IDEA学习——模板及其常用模板
模板及其常用模板 (1)psvm (2)sout sout / soutp / soutv / 变量.sout (3)fori iter增强for循环 itar普通for循环 (4)list.for ...
- 空间数据可视化:1. 3D_Bar图表| 空间柱状图
1.Sublime的使用 中文版的配置 https://jingyan.baidu.com/article/ca2d939d1e83feeb6c31cefc.html (百度经验) sublime里边 ...
- 20165235 实验一 Java开发环境的熟悉
20165235 实验一 Java开发环境的熟悉 课程:JAVA程序设计 姓名:祁瑛 学号:20165235 指导老师:娄嘉鹏 实验日期: 2018.4.2 实验内容:java开发环境的熟悉 一,实验 ...
- pageHelper多个sql分页
之前有个需求,在一个页面中需要有多个sql分页查询然后放到一个list中,展示,但是会出现一个bug,就是每次分页都会展示第一条查出的所有的数据: 第一页 第二页 因为是截的生产环境,第一条数据被处理 ...
- RFC2616-HTTP1.1-Methods(方法规定部分—单词注释版)
part of Hypertext Transfer Protocol -- HTTP/1.1RFC 2616 Fielding, et al. 9 Method Definitions The se ...
- Linux学习笔记10
创建文件 touch touch filenames 创建文件夹 mkdir mkdir dir3 dir4 dir5 建立多个文件夹 mkdir ~/games 在登录用户的本目录之下建立game ...
- c#接口与抽象类的区别(一)
abstract 修饰符用于表示所修饰的类是不完整的,并且它只能用作基类.抽象类与非抽象类在以下方面是不同的: 抽象类不能直接实例化,并且对抽象类使用 new 运算符是编译时错误.虽然一些变量和值在编 ...