Servlet & Filter 执行原理
一、Servlet的两个Map
当请求到达后,web容器是如何查找Servlet的呢?执行流程又是什么?
可能很多人和我一样,只知道在web,xml中配置拦截规则,然后反射+映射就完事了?
当Servlet实列被创建后,会将该Servlet实列的引用存放到一个Map中,该Map的K是url,V是Servlet的实列引用+
即Map<String,Servlet>
当Web容器从用户请求中分离出URI 后,会首先在这个Map查找是否又对应的Value,即Servlet引用
如果存在的话,就会调用其的service方法,若不存在,则需要创建该Servlet实列
若请求的Servlet实列不存在,就有下面这一波操作
在web容器的内存中,还存了一个Map集合该Map的K为URI,V为在web.xml中配置的与之对应的Servlet的全限定名
即Map<String,String>
当Web容器从用户的请求中分离出URI后,到第一个Map中又没有找到对应的Servlet引用,
于是跑到第二个Map中去找,从中找到其所对应的类名,再根据反射机制,创造这个Servlet实列,
最后还得把这个实列引用存入到第一个Map中,前人种树后人乘凉。
二、Filter的一个Map一个数组
像存放Servlet信息的两个Map一样,在服务器中同样存在用于存放Filter相关信息的Map
但Map只有一个,因为Filter的创建时机不同于Servlet,其是由在服务器启动时由Web容器自动创建的
这个Map的K是Filter的<url-pattern/>,
当然,若Filter没有设置<url-pattern>,而是使用了<servlet-name/>
则会将制定的Servlet的<url-pattern>值放到Map中作为K
Map的V为该Filter的引用
在应用被启动时,服务器会自动的创建所有的Filter实列,并将他们一一存入Map
在服务器中,对于每一个请求还存在一个数组,用于存储满足当前请求的所有Filter及最终的目标资源
当请求到达服务器后,服务器会解析出URI,首先查询Map中与该请求匹配的Filter
每找到一个满足要求的Filter,就将其放入到数组中,直到过滤完所有的Filter
这个数组中存放的是与请求匹配的Filter,可以看作一个“链”,服务器会按照顺序对请求进行依次过滤处理
三、注意
对于Filter的Map而言,会查询过滤所有的Key,将所有符合匹配的都装入到数组中
而Servlet的Map的查询过程是,只要找到一个匹配的Key,就不会再往后面找了
Servlet & Filter 执行原理的更多相关文章
- [转]servlet的执行原理与生命周期
一.先从servlet容器说起:大家最为熟悉的servlet容器就是Tomcat ,Servlet 容器是如何管理 Servlet? 先看一下tomcat的容器模型: 从上图可以看出 Tomcat 的 ...
- servlet的执行原理与生命周期
先从servlet容器说起:大家最为熟悉的servlet容器就是Tomcat ,Servlet 容器是如何管理 Servlet?先看一下tomcat的容器模型:从上图可以看出 Tomcat 的容器分为 ...
- elasticsearch中filter执行原理深度剖析(bitset机制与caching机制)
(1)在倒排索引中查找搜索串,获取document list date来举例 word doc1 doc2 doc3 2017-01-01 * *2017-02-02 * *2017-03-03 ...
- 浅析Servlet执行原理
在JavaWeb学习研究中,Servlet扮演重要的作用,学好它,是后续JavaWeb学习的良好基础.无论是SSH,还是SSM,微服务JavaWeb技术,都应先学好Servlet,从而达到事半功倍的效 ...
- 过滤器(filter),监听器(listener),与servlet的执行顺序
创建: 加载顺序 监听器-->过滤器-->Servlet.项目启动后,容器会首先创建声明的各种监听器,为后继的各个事件监听做准备,然后创建过滤器,最后是Servlet.销毁的时候是反序进行 ...
- [转帖]浅析Servlet执行原理
浅析Servlet执行原理 原贴地址: https://www.cnblogs.com/wangjiming/p/10360327.html 原作者画的图挺好. 自己之前看过iis的一些配置文档 但是 ...
- servlet/filter/listener/interceptor区别与联系
转自:http://www.cnblogs.com/doit8791/p/4209442.html servlet.filter.listener是配置到web.xml中(web.xml 的加载顺序是 ...
- Java Servlet Filter(转)
做web开发的人对于Filter应该不会陌生,一直在很简单的使用,但是一直没有系统的总结一下,随着年纪的慢慢长大,喜欢总结一些事情,下面说说我对Filter的理解,官方给出的Filter的定义是在请求 ...
- 干货,一文带你超详细了解 Filter 的原理及应用
提出问题 1.我们在访问后台很多页面时都需要登录,只有登录的用户才能查看这些页面,我们需要 在每次请求的时候都检查用户是否登陆,这样做很麻烦,有没有一种方法可以在我们请求之 前就帮我们做这些事 ...
随机推荐
- Django(九) xadmin全局配置
xadmin的使用,首先需要对model进行注册,才能在后台管理中进行操作. 1.在app里创建py文件:adminx(必须这个名称) 2.导入xadmin和models里的类,格式如下: 其中lis ...
- springfox-swagger原理解析与使用过程中遇到的坑
swagger简介 swagger确实是个好东西,可以跟据业务代码自动生成相关的api接口文档,尤其用于restful风格中的项目,开发人员几乎可以不用专门去维护rest api,这个框架可以自动为你 ...
- true - (成功的)什么都不做
总览 (SYNOPSIS) true [忽略命令行参数] true OPTION 描述 (DESCRIPTION) 程序 结束 时, 产生 表示 成功 的 状态码. 下列的 选项 没有 简写 形式. ...
- 批量Ping执行Bash脚本
#!/bin/bash # Ping Batch Script # 连接超时时间 TMOUT= # 最大线程数 MAX_THREAD= # 保留内存大小 MIN_MEM= # 默认ip配置,可通过 - ...
- vue-cli 新手 搭建项目 一
新手入坑vue 搭建项目 一.安装 vue-cli 1.打开cmd 输入命令(已自行安装好npm node等) npm install --global vue-cli (全局安装) 二.创建项 ...
- Delphi txt文件读取及写入
简介:Delphi支持三种文件类型:文本文件.记录文件.无类型文件.文本文件的读... 在进行win32开发中对文件的读写是最常用的操作之一 Delphi 支持三种文件类型: 文本文件.记录文件 ...
- PMP项目管理——项目范围管理
项目范围管理包括确保项目做且只做所需的全部工作,以成功完成项目的各个过程.项目范围管理主要在于定义和控制哪些工作应该包括在项目内,哪些不应该包括在项目内. 项目范围管理过程包括: 1 规划范围管理—— ...
- $nextTick与nextTick
$nextTick Data-Dom-之后回调 nextTick Data-回调-Dom
- JVM内核-原理、诊断与优化学习笔记(四):GC算法与种类
文章目录 GC的概念 GC算法 引用计数法 引用计数法的问题 标记清除 标记压缩 小问题 复制算法 复制算法的最大问题是:空间浪费 整合标记清理思想 -XX:+PrintGCDetails的输出 gc ...
- 拾遗:sed&vim
一.sed查漏补缺 1.sed x,+y,从第x行的开始,向下连续y行(包含x行在内是y+1行!) f@z ~/testdir $ cat -n x.awk #!/usr/bin/awk -f BEG ...