Java Web 深入分析(8) Servlet工作原理解析
Servlet
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容。
Servlet容器
- servlet容器启动过程:
在tomcat容器管理等级中,Context直接管理着Servlet在容器中的包装类Wrapper,所以Servelt容器如何运行就影响这servlet,下面就是servlet容器启动过程
Servlet容器启动时,触发servletContextEvent事件,并通知相应的监听器servletContextListener;
Servlet容器在启动的过程中通过servletContextListener监视servletContext的状态(初始化或者销毁servletContext);
servletContextListener中通过contextInitialized初始化方法,根据web.xml对servletContext进行配置,即将Context容器的属性缓存在内存中,供Service服务利用; web应用初始化工作:
web的初始化是在contextConfig中实现的,应用的初始化主要是对web.xml进行解析,这个文件描述了Web应用的关键信息,也是整个Web应用的入口。
Tomcat将web.xml文件解析后,将其中的属性设置到Context容器中,这里包括创建Servlet实例,Filter和Listener。将Servlet包装成Context中的包装类Wrapper。
Tomcat的context容器中的StrandWrapper对象就是tomcat中对于Servlet的包装也就是,Servlet是一种JavaWeb规范而不是直接耦合成一个类包装在tomcat容器里面,这是standwapper对象的设计初衷。Servlet实例
- 创建Servlet对象
如果Servlet在web.xml中load-on-startup的配置大于0,那么在Context容器启动时就会被实例化。在tomcat/conf/web.xml文件中,配置了2个load-on-startup为1,3的默认启动类,分别是Servlets.DefaultServlet、org.apache.servlet.JspServlet 初始化Servlet
前面讲了Servlet规范在tomcat的实现就是context中StandardWrapper。所以初始化的时候就是通过调用Servlet的init方法,同时把包装了StandarWrapper对象的StandarWrapperFacade作为ServletConfig传给Servlet。
Servlet从web.xml被解析到初始化。ServletConfig 和 ServletContext的区别ServletConfig:从一个servlet被实例化后,对任何客户端在任何时候访问有效,但仅对本servlet有效,一个servlet的ServletConfig对象不能被另一个servlet访问。
Servlet体系结构
- 如果说javaweb规范,概况来讲肯定离不开 servlet规范。而servlet规范主要有这3个类ServletConfig、ServletRequest、ServletResponse。ServletConfig在servlet初始化的过程中就传给了servlet了,而ServletRequest和ServletResponse在servlet运行中我很清楚的知道他们的用法。这个Servletconfig对象和Servlet采用典型的“握手型的交互”根据交互场景来组装数据。而实际上servletconfig通过其门面设计模式的servletcontext类给servlet引用,通过servletcontext 可以获得context容器的相关信息如路径 和最小版本。servletRequest和servletresponse又通过web容器封装成了 httpservletRequest和httpservletresponse对象

Servlet如何工作
先看一个典型的访问路径 http://localhost:80/test ,HTTP协议 +host名+port端口+url ,其中HTTP和host名用于服务器和客户机之间建立TCP/IP连接,而后面的url就是确立这个客户机浏览器将访问服务器web容器里面哪个servlet的。服务器的web容器中有一个mapper专门管理这种url<->servlet的映射关系!

- 然后这个请求URL进入到这个servlet容器中之后,就会调用相应的的service方法,通常我们不是直接去实现javax.servlet.servlet类,而是实现简单点的httpservlet或者genericServlet类,然后选择性覆盖相应方法去实现我们的功能。
- 然后再现在的MVC框架中,对于所有请求的处理的基本原理就是将它们都映射到一个Servlet,然后再去实现其service方法,这个方法也就是MVC的入口。
最后当servlet从web容器中移除后,这个servlet的生命周期也就相应的结束了由容器调用相应的destroy方法。
Servlet中的Listener
- 在整个tomcat容器的设计中,其实很多容器诸如此类,listener使用的非常广泛,它是基于观察者模式而设计的。类图如下

Filter如何工作
- 其实在web.xml 中,filter也是一个常用的配置项,与servlet对象相比 ,除了有request和response对象,它还有一个filterchain对象,类图如下。

- 在tomcat容器中,FilterConifg 和FilterChain的实现类分别是ApplicationFilterConfig和ApplicationFilterChain,而Filter接口由用户自己去实现,是这3个接口与Servlet中的类似,只不过ApplicationFilterChain可以把这些Filter串联起来,组成一个Filter链,这点和Jetty的Handler链在设计上有异曲同工之妙。
- 再看下如图的Filter类三个接口方法:

- Filter的一个比喻,如果有2条往返的加工流水线,我们可把这2条流水线看做 web交互中的request和response ,即请求和响应,在这2条流水线的远转图中,Filter就好比一个流水线工人对流动的产品进行处理,可以在某个工位存放或者取出或者拦截一些数据。
Servlet中的url-pattern
- 前面我们说过 Servlet 和 URL之间的对象关系 ,在tomcat有一个Mapper类实现请求访问时去对应哪个Servlet。而Filter的url匹配是在创建 ApplicationFilterChain时,对匹配的Url相应的Filter放入到ApplicationFilterChain对象的Filters数组中,然后FilterChain依次调用这些Filter。
- Url在web.xml被加载时会校验这些url-pattern是否合法,这个检查是在StandardContext的ValidateURLPattern中进行,吐过不通过就会报这个java.lang.IllegalArgumentException:Invalid ...
- 解析规则如下

Java Web 深入分析(8) Servlet工作原理解析的更多相关文章
- Servlet工作原理解析 《深入分析java web 技术内幕》第九章
参考关于servblet的相关文章 侧重概况:https://blog.csdn.net/levycc/article/details/50728921 ibm的相关:https://www.ibm. ...
- 【Java】Servlet 工作原理解析
Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础.因而掌握 Servlet 的工作原理是成为一名合格的 Java Web 技术开发人员的 ...
- Servlet 工作原理解析
转自:http://www.ibm.com/developerworks/cn/java/j-lo-servlet/ Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 J ...
- JavaWeb总结--Servlet 工作原理解析
从 Servlet 容器说起 要介绍 Servlet 必须要先把 Servlet 容器说清楚,Servlet 与 Servlet 容器的关系有点像枪和子弹的关系,枪是为子弹而生,而子弹又让枪有了杀伤力 ...
- [转]Servlet 工作原理解析
Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础.因而掌握 Servlet 的工作原理是成为一名合格的 Java Web 技术开发人员的 ...
- Servlet 工作原理解析--转载
原文:http://www.ibm.com/developerworks/cn/java/j-lo-servlet/index.html?ca=drs- Web 技术成为当今主流的互联网 Web 应用 ...
- 【Tomcat】Servlet 工作原理解析
Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础.因而掌握 Servlet 的工作原理是成为一名合格的 Java Web 技术开发人员的 ...
- Servlet工作原理解析(tomcat7、嵌入式服务器)
目录 Servlet 容器Tomcat Servlet 容器的启动过程 Web 应用的初始化工作 Servlet 体系结构 创建 Servlet 对象(如何被加载) 初始化 Servlet(如何被 ...
- Servlet工作原理解析
Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础.要介绍 Servlet 必须要先把 Servlet 容器说清楚,Servlet 与 S ...
随机推荐
- Oracle的大表,小表与全表扫描
大小表区分按照数据量的大小区分: 通常对于小表,Oracle建议通过全表扫描进行数据访问,对于大表则应该通过索引以加快数据查询,当然如果查询要求返回表中大部分或者全部数据,那么全表扫描可能仍然是最好的 ...
- 关于linux下的系统存储管理
https://blog.csdn.net/aaaaaab_/article/details/80159871 //查看当前系统磁盘使用空间 df -h //查看当前目录文件占用空间大小 du -sh ...
- javaScript(拼写树形)+ajax请求,去后台查找数据
第一步:页面加载完成时,利用jquery中的一函数,调用js方法,js方法,发送ajax请求,去后台查找父类权限集合,响应回来json格式的数据,对数据进行操作,往页面上添加内容 //页面初始化加载菜 ...
- OpenJudge计算概论-买房子
/*================================================================= 买房子 总时间限制: 1000ms 内存限制: 65536kB ...
- UVA:1600 巡逻机器人
机器人要从一个m*n(m和n的范围都在1到20的闭区间内)的网格的左上角(1,1)走到右下角(m,n).网格中的一些格子是空地,用0表示,其它格子是障碍,用1表示.机器人每次可以往四个方向走一格,但不 ...
- 跨平台免费极简的markdown工具
1. 工具名 typora 2. 工具官网 https://www.typora.io
- 002-创建型-01-工厂方法模式(Factory Method)
一.概述 定义一个创建对象的接口,但让实现这个接口的类来决定实例化那个类,工厂方法让类的实例化推迟到子类中进行. 工厂方法模式(FACTORY METHOD)同样属于一种常用的对象创建型设计模式,又称 ...
- warning: deleting 'void *' is undefined 错误
如果我们new出来的指针是一个基本类型,没什么关系,内存还是会被释放的,但是如果是一个类对象指针,在处理过程中转成了void*,那就有问题了,析构函数将不会被调用. 故new的指针类型要和delete ...
- Spark2.x学习笔记:5、Spark On YARN模式
https://blog.csdn.net/chengyuqiang/article/details/77864246
- QuickText for Notepad++
昨刚投入新欢Notepad++,思路如泉涌,码代码也不累了,一口气用她码了两篇文- 今再接再厉,继续.QuickText严格说来算不上什么神器级插件,也仅只是一个缩写快捷输入的插件而已.可用得好,那效 ...