Tomcat是一个Servlet容器?
“Tomcat是一个Servlet容器”,这句话对于2019年的程序员应该是耳熟能详的。
单纯的思考一下这句话,我们可以抽象出来这么一段代码:
class Tomcat {
List<Servlet> sers;
}
如果Tomcat就长这样,那么它肯定是不能工作的,所以,Tomcat其实是这样:
class Tomcat {
Connector connector; // 连接处理器
List<Servlet> sers;
}
我们这里先不考虑Connector的底层实现,我们只需知道Connector是负责处理请求的。
我们还是来想想容器。
Context
顾名思义,Servlet容器就是用来装载存储Servlet的。
一个Servlet表示一个运行在服务端的程序(servlet = server + applet)。用户想要使用这种程序,需要向该程序发送请求以及获取该程序的响应,也就是Servlet规范中的ServletRequest、ServletResponse。
所以Servlet其实就是Java中用来处理请求的一种规范,所以我们的项目中通常都会有一个或多个Servlet,由它来负责接收请求,或者将请求转交给其他业务逻辑。
所以我们的Spring MVC、Spring Boot都存在一个DispatcherServlet(类似功能的一个Servlet,负责接收请求)。
所以,通常Servlet是属于一个应用程序(项目)的,换句话说,我们的一个应用包含多个Servlet,所以这是第二层Servlet容器--应用,也就是Tomcat中的Context(应用上下文)。那么第一层Servlet容器呢?
Wrapper
Wrapper就是第一层Servlet容器,Wrapper表示Servlet的包装者,所以它是最接近Servlet的,那么为什么需要Wrapper呢?
我们通常认为Wrapper是这样的:
class Wrapper {
Servlet servlet;
}
一个Wrapper对应一个Servlet,这么来想的话,确实不需要Wrapper,但是我们还要考虑一些其他的情况:
- 比如Filter,一个Filter是可以对应一个Servlet的。
- 比如ServletPool,通常的Servlet是所有请求线程公用的,但是在Servlet中支持每一个请求线程单独使用独立的Servlet实例。
所以在Wrapper中,不仅仅只包括一个Servlet,还包括过滤器和Servlet池,所以Wrapper是第一层Servlet容器。
Host
在我们现实生活中,一个应用都是部署在一个主机上的,所以,一个主机可以包含多个应用,一个应用包含多个Servlet,所以,Host是第三层容器。在Tomcat中,Host表示虚拟主机,Tomcat在处理请求时,可以根据请求的域名进入到相应的Host中进行处理。
Engine
Host管理Context,Context管理Wrapper,Wrapper管理Servlet,而Engine就是用来管理Host的。所以Engine是第四层容器。
最后
肯定有人有疑问,那么Engine之上不需要容器了吗?不需要了?举个例子:
我们的钱(Servlet)要放在钱包(Wrapper)里,钱包要放在书包(Context)里,书包要放在行李箱(Host)里,行李箱要放在飞机(Engine)上。
所以,如果你问我“Engine放哪?”就相当于问我“飞机放哪?”
答案是不再需要更高层次的容器了,因为没有必要了。
总结
在Tomcat中,容器分为:
- Wrapper
- Context
- Host
- Engine
文章很简短,也很久没写文章了,今天抽时间简短的表达一下我对Tomcat“容器”概念的理解,希望大家还是能有所收获吧。大家可以关注我的公众号1点25,持续更新对技术的新思维与新理解。
Tomcat是一个Servlet容器?的更多相关文章
- 对于Servlet、Servlet容器以及一个Servlet容器-Tomcat
Servlet.Servlet容器等内容讲解 转载自http://blog.csdn.net/iAm333 对于Servlet.Servlet容器以及一个Servlet容器-Tomcat这些概念讲解的 ...
- how tomcat works 五 servlet容器 上
servlet容器是用来处理请求servlet资源,并为Web客户端填充response对象的模块.在上一篇文章(也就是书的第四章)我们设计了SimpleContainer类,让他实现Containe ...
- how tomcat works 5 servlet容器 下
上一节,我们主要说的是Wrapper容器,这一节我们说Context容器. 再重申一遍,一个Context容器可以包含多个Wrapper容器; 一个Wrapper容器就表示一个独立的servlet. ...
- Web服务器(Apache)与Servlet容器(Tomcat)
之前一直比较迷惑Apache与Tomcat的关系,通过查询资料,有所了解,现记录于此. Apache与Tomcat 两者定位:Apache是HTTP Web服务器,Tomcat是Web容器. 有一个非 ...
- tomcat与jboss等容器的区别
1.JBoss 是 J2EE 应用服务器,而 Tomcat 只是一个 Servlet 容器,或者说是一个简单的 J2EE 应用服务器. JBoss 中的 Servlet 容器还是 Tomcat. 与 ...
- Servlet容器container
通俗点说,所谓容器,就是放东西的地方.Servlet容器自然就是放Servlet的地方.J2EE开发,是有分工的.一般的程序员,写得都是应用开发,我们会按照一定的规则,开发我们的系统,比如用Servl ...
- 探秘Tomcat——一个简易的Servlet容器
即便再简陋的服务器也是服务器,今天就来循着书本的第二章来看看如何实现一个servlet容器. 背景知识 既然说到servlet容器这个名词,我们首先要了解它到底是什么. servlet 相比你或多或少 ...
- httpServletRequest对象、filter、servlet、servlet容器、catalina、tomcat、以及web容器之间的关系
学习servlet的时候经常感到疑惑 HttpServletRequest是服务器创建的?还是servlet容器创建的? 过滤器是服务器创建的?还是servlet容器创建的? serlet容器和tom ...
- tomcat(5)servlet容器
[0]README 0.0)本文部分文字描写叙述转自:"深入剖析tomcat",旨在学习 tomcat(5)servlet容器 的基础知识. 0.1)intro to servle ...
随机推荐
- Time Frequency (T-F) Masking Technique
时频掩蔽技术. 掩蔽效应 声掩蔽(auditory masking)是指一个声音的听阈因另一个声音的存在而上升的现象.纯音被白噪声所掩蔽时,纯音听阈上升的分贝数,主要决定于以纯音频率为中心一个窄带噪声 ...
- 洛谷 P1379 八数码难题 题解
我个人感觉就是一道bfs的变形,还是对bfs掌握不好的人有一定难度. 本题思路: 大体上用bfs搜,用map来去重,在这里只需要一个队列,因为需要较少步数达到的状态一定在步数较多的状态之前入队列. # ...
- JMX脚本在某些机器上报错,有的运行超时
运行超时的 是因为在server端运行命令执行脚本,是server给agent下达的指定,但是server端到agent的10050端口没开,所以或一致堵死在那,知道执行超时, 解决:开通server ...
- .NET API Gateway Ocelot 介绍
项目:https://github.com/ThreeMammals/Ocelot Windows (AppVeyor) Linux & OSX (Travis) Windows Ma ...
- Android入门教程(二)
Hello World 项目 首先当我们启动Android Studio的虚拟机时,可以看到第一个项目Hello World,那么虚拟机中的Hello World!是如何书写的呢? 看看虚拟机运行结果 ...
- Ajax 的一些概念 解析
什么是Ajax Ajax基本概念 Ajax(Asynchronous JavaScript and XML):翻译成中文就是异步的JavaScript和XML. 从功能上来看是一种在无需重新加载整个网 ...
- js如何将汉字转化为拼音
github地址,上面有封装好的转换工具:https://github.com/sxei/pinyinjs 里面有几个库,根据功能,库的文件大小也不一样,可以根据需求去引入使用. 里面封装好了方法: ...
- hhhhh臭不要脸//捂脸)多不好意思啊you进步惹
如题↑↑↑ 千万不要相信题目 还是看图说话吧↓↓↓ 我真的蒟蒻啊,,,准确率在70边缘徘徊,卑微☹ 不过还是侥幸地进入了前 30 名! 今天七夕欸,然鹅,,, qq空间里面弥漫着恋爱的酸臭味 香气,‘ ...
- mysql 升序降序
默认不指定,order by 按照升序排列. asc:升序 desc:降序
- 【POJ2632】Crashing Robots
题目传送门 本题知识点:模拟 模拟机器人的运作过程,分别有三种功能,L 则是左转90°,R 则是右转90°,L 则是前进1格.让我们去模拟并判断它们的状态. 输入: 第一行是测试样例 第二行分别是矩形 ...