Servlet和Tomcat底层分析
Servlet源码解析分析
1 Servlet技术的结构图
Servlet技术中的三大接口有Servlet,ServletConfig和Serializable,而GenericServlet抽象类实现了这三个顶层接口,最后HttpServlet类实现了GenericServlet抽象类,所以要首先一个Servlet直接继承HttpServlet,Servlet接口简介
这个Servlet接口就是servlet技术的规范:其中有5大规范
1 init(); 该方法负责初始化Servlet对象,创建好Servlet对象之后就调用这个方法来初始化该对象,
2 service();该方法是处理客户端的请求并返回响应,当接收到请求时就会调动该方法,
3 destory();该方法是负责释放Servlet对象占用的资源,当servelt对象结束生命周期时调用该方法销毁servlet对象,
4 getServletInfo(); 该方法返回Servlet的创建者,版本和版权,
5 getServetConfig();该方法返回servlet初始化参数,ServletConfig接口介绍
作用就是在servlet中如何获取配置信息的,有四个抽象方法:
1 getServletName();用于获取Servlet名字,web.xml中定义的servelt-name;
2 getServletContext();用于获取Servlet上下文对象,
3 getInitParameter();获取初始化信息;GenericServlet抽象类
这个抽象类是servlet的默认实现,是与具体协议无关,基于协议的HttpServlet抽象类
它是一个抽象类,但是他没有抽象方法,他不能实例化,那么如果处理请求和作出响应这个类没有定义,那就需要我们自己继承这个类来自定义实现具体的处理方法,
有处理协议相关的请求方法:doGet(), doPost()方法,service方法
HttpServlet是基于Http协议实现Servlet基类,我们编写servlet时直接继承他就可以了,springmvc中的dispatchServlet就是继承httpServlet,这个类主要就是用来根据协议来进行不同的处理,tomcat 架构图
1 Server就是tomcat
2 Server包含了多个Service,
3 Service中有connector组件和engine组件
4 engine中包含了host主机,
5 host里面有listener监听器,context对象,
6 context对象中包含了webapp
Server就是服务器的意思,代表了整个tomcat,一个tomcat中只有一个server,
Server组件中至少有一个Service组件,用来提供具体的服务,也有对应的Server配置文件,
Service是一个逻辑层,用来接收客户端请求,解析请求,完成对应的逻辑处理,
connector是一个连接器,处理客户端连接,封装成Request和Response,然后交给Container进行处理,
container是一个处理逻辑的组件里面有engine,host,context,
engine表示整个Servlet引擎,
host 代表一个站点,虚拟主机,是服务器运行实例,在host里面自动扫描webapps目录,war包自动解压自动部署。
content 代表应用程序,就是web程序,每一个运行的webapp最终都是以Context的形式存在,每一个Context都有一个根路径和请求路径,
webapps下的每一个目录都是一个应用,Root目录中存放主应用,webapps是一个站点,
Servlet和Tomcat底层分析相关推荐
- tomcat架构分析 (Session管理)【转】
原文地址:https://www.iteye.com/blog/gearever-1546423 Session管理是JavaEE容器比较重要的一部分,在app中也经常会用到.在开发app时,我们只是 ...
- tomcat架构分析(valve源码导读)【转】
原文地址:https://www.iteye.com/blog/gearever-1540028 源码面前,了无秘密 ----侯捷 在to ...
- tomcat架构分析(connector BIO 实现)【转】
原文地址:https://www.iteye.com/blog/gearever-1841586 在tomcat架构分析(概览)中已经介绍过,connector组件是service容器中的一部分.它主 ...
- SpringBoot嵌入Tomcat原理分析
SpringBoot嵌入Tomcat原理 内嵌Tomcat启动原理 首先,来到启动SpringBoot项目的地方,也就是朱配置类. @SpringBootApplication public clas ...
- Android底层隐私数据,Android Intent传递数据底层分析详细介绍_Android_脚本之家
Android Intent传递数据底层分析详细介绍 我们知道在Activity切换时,如果需要向下一个ActivityB传递数据,可以借助Intent对象的putExtra方法. 但是不知各位有没 ...
- 【Tomcat】Tomcat性能分析
一.预研任务介绍和预研目标 任务介绍: Apache Tomcat是目前较为流行的web服务器,以其技术先进.性能稳定著称,其次它还是一个免费开源的项目. Tomcat性能分析的意义在于能为日常工作中 ...
- 【Python基础避坑】函数内存底层分析,全局变量/局部变量,参数传递,浅拷贝/深拷贝
老高说,基本功不扎实会在工作中遇到很多的坑,非常同意- 函数定义示例 1.含有返回值 # -*-coding:utf-8-*- def add(a, b):'''两数相加'''sum = a + br ...
- C++11 std::shared_ptr的std::move()移动语义底层分析
std::shared_ptr的std::move()移动语义底层分析 执行std::move()之前: 执行std::move()之后: 结论:一个浅拷贝 sizeof(std::shared_pt ...
- android中intent放数据类型,Android Intent传递数据底层分析详细介绍
Android Intent传递数据底层分析详细介绍 我们知道在Activity切换时,如果需要向下一个ActivityB传递数据,可以借助Intent对象的putExtra方法. 但是不知各位有没 ...
- String的底层分析 (学习笔记)
StringTable底层分析 String的基本特性 StringPool String的内存分配 字符串的拼接操作 拼接效率的对比 intern()的理解 new String("&qu ...
最新文章
- RhinoMock学习-绑定回调
- hammer用法 jquery.hammer.js
- window apktool 的下载
- 易语言超文本ctrl c,易语言超文本浏览框处理键盘消息源码
- CJ20N被删除物料的历史记录
- [Z]四种浏览器对 clientHeight、offsetHeight、scrollHeight、clientWidth、offsetWidth 和 scrollWidth 的解释...
- 视频课程更新,机器学习、数理统计、矩阵分析、运筹视频教程
- 有没有计算机用户号,刚做的系统怎么有账户-用户帐号系统设计的原则有哪些?...
- poj 1185(状态压缩DP)
- mysql now()相减_MySQL 时间函数加减计算
- easyboot制作xp、win7、ubuntu、老毛桃winpe、深山红叶dos工具箱多合一光盘
- ArcGIS土地利用转移矩阵(附土地利用数据下载)
- 强化学习基础05——gym
- 页面可视化搭建工具业界的轮子
- 筛质数—(朴素筛法、埃氏筛法、欧拉筛法(线性筛法))
- 计算机教师职业幸福感,教师职业幸福感的领悟
- 联想小新一键恢复小孔_联想小新Air系列一键恢复及恢复后首次配置的步骤
- PCL:RANSAC 圆拟合(二维圆 + 空间圆)
- Ubuntu14.04上安装tftpd服务
- 关于本人上传的资源Win98WinXPWin7整合包虚拟机Alpha1
热门文章
- mac osx 系统 brew install hadoop 安装指南
- Oracle SQL 模拟MySQL的inet_aton()和inet_ntoa()
- ASP .NET中一个可以用来大作文章的地方。
- c语言函数的英文全称
- 关于python的论文the philosophy_Philosophy in Python
- 拓端tecdat|R语言时变向量自回归(TV-VAR)模型分析时间序列和可视化
- 拓端tecdat|R语言用多项式回归和ARIMA模型预测电力负荷时间序列数据
- 拓端tecdat|R语言进行数值模拟:模拟泊松回归模型的数据
- mysql比较varchar值大小_Mysql varchar大小长度问题
- smale学习之数学表达式(day2)