2019独角兽企业重金招聘Python工程师标准>>>

其实就是在Servlet容器原型(二)的基础上,讲讲Tomcat中处理HTTP请求的那部分的一个优化,这也是Tomcat4中默认采用的方法。

在这幅图中我们看到Bootstrap启动之后会启用一个叫做HttpConnector的组件,这个组件负责绑定会用ServerSocket绑定一个IP和一个端口,那么我们猜想一下,假如Tomcat对外提供服务,那么可能处理的客户端请求就有可能是HTTP或者是HTTPS,那么这个两个Connector肯定是有着不同的实现,如果都放在Bootstrap的main中实现,肯定不行,那么我们很自然的就会想到用多线程去实现。没错,Tomcat4中也是这么干的,Connector实现了Runnable接口。那么一种类型请求来,就不会阻碍另一种类型的请求来了。

接下来HttpConnecor接收到了代表客户端的Socket,把它交给HttpProcessor处理,这一步的处理还是要排队的,那么如何做到不排队呢?Tomcat 4的答案还是用多线程,Processor实现了Runnable接口(在run方法中进行process),那么一个客户端Socket进来,就为其分配一个线程去处理,这样就不会阻碍到再有新的Socket进来的处理了。

同时题外话,这样就可以理解了Servlet中的成员变量可能会有线程安全问题的说法了,Servlet单实例多线程访问。

但是,线程的创建与销毁代价的蛮高的,因此,HttpConnector会维护一个HttpProcessor的线程池,实现线程的可复用。当然,这个线程池的伸缩可根据不同的策略去配置。

上面这些方法很粗糙,当然现在的Tomcat版本已经有了很好的连接器实现。

最后,引入容器Container的概念。有了容器,我们就不用再去直接new一个Servlet出来了,而是使用自定义的类加载器(ClassLoader),那么这个把Servlet从字节码加载进内存的东西就要负责管理Servlet的生命周期了(我们先不讲到生命周期)

具体就是一个HttpProcessor关联一个容器,调用其invoke方法,invoke方法会把servlet加载出来,并调用器sevice方法处理。这里的“容器”其实是直接找到了Servlet类,还没有加入映射器Mapper组件的帮助,直接根据URL来去把Servlet加载出来,目的是引入容器的概念。

转载于:https://my.oschina.net/zjh92119/blog/299093

Servlet容器原型(三)——Tomcat 4默认连接器浅谈相关推荐

  1. tomcat(4)Tomcat的默认连接器

    [0]README 0.0)本文部分文字描述转自:"深入剖析tomcat",旨在学习 tomat(4)Tomat的默认连接器 的基础知识: 0.1)Tomcat中的连接器是一个独立 ...

  2. Tomcat的默认连接器

    Tomcat有几个连接器可供选择. 我将把APR连接器放在一边,而将重点放在BIO和NIO上. BIO连接器(阻塞I / O)正在阻塞–它使用线程池,每个线程在该线程池中接收请求,处理请求,响应并返回 ...

  3. 容器、微服务和互联网架构浅谈

    随着云服务的兴起,企业应用正在从分层式架构逐步迁移到互联网架构.传统的企业应用架构通常是单一架构(Monolithic),即典型的MVC三层架构.以一个主流的J2EE企业应用而言,其按照模型(数据层) ...

  4. Java可以用到军事方面吗_恭喜遥三运载火箭发射成功,浅谈java在军事方面的运用!...

    恭喜长征五号遥三成功发射!来聊聊军事系统都是用什么语言编写的 长征五号运载火箭,是中国运载火箭升级换代的重要工程,作为中国首型大推力无毒无污染液体火箭,创新难点多.技术跨度大.复杂程度高. 这次遥三的 ...

  5. java 中counter什么意思_java容器中的几种计数方法浅谈

    本文讨论java集合容器中的几种元素数量获取的方式,命题很小,但是也足以让我们思考一些东西. 所谓计数:即是给出所在容器的元素总数的方式.一般能想到的就是两种方式:一是使用某个字段直接存储该计数值,二 ...

  6. tomcat(5)servlet容器(lastest version)

    [0]README 0.0)本文部分文字描述转自:"深入剖析tomcat",旨在学习 tomcat(5)servlet容器 的基础知识: 0.1)intro to servlet容 ...

  7. tomcat(5)servlet容器

    [0]README 0.0)本文部分文字描述转自:"深入剖析tomcat",旨在学习 tomcat(5)servlet容器 的基础知识: 0.1)intro to servlet容 ...

  8. springboot-嵌入式Servlet容器(Tomcat)源码分析以及容器切换

    目录 一.springboot的嵌入式Servlet容器(tomcat) 1.原理 2.源码 (1)ServletWebServerApplicationContext的createWebServer ...

  9. SpringBoot之配置嵌入式Servlet容器

    1.概述 文章目录 1.概述 2.如何修改SpringBoot的默认配置 3.定制和修改Servlet容器的相关配置 4.注册Servlet三大组件 5.替换为其他嵌入式Servlet容器 6.嵌入式 ...

最新文章

  1. 从 SGD 到 Adam —— 深度学习优化算法概览 各种优化器 重点
  2. java批量事物管理_[疯狂Java]JDBC:事务管理、中间点、批量更新
  3. win8.1适合哪个版本的linux,紧跟Win8 全面体验最适合国人的深度Linux
  4. AC自动机——Uva 11468 子串
  5. 自动化测试--testNG
  6. w ndows摄像头驱动怎么安,win10摄像头驱动程序怎么下载安装
  7. 看板工具 Wekan 安装配置启动和数据备份
  8. c语言经典程序100例加注释,C语言经典100例
  9. Thread-Specific Storage Pattern
  10. Python爬虫_03_urllib_xpath_JsonPath_BeautifulSoup应用及案例
  11. 如何在Ubuntu 20.04上使用Seafile同步和共享文件
  12. 如何制作3D动画人物
  13. windows s2019安装crucible-4.8.2
  14. Mac使用Python接入东方财富量化接口Choice,调试与获取数据
  15. 十位改变世界的人工智能领域大师
  16. b站如何进行屏幕录制?录屏最值得尝试的几款软件
  17. B站愚人节彩蛋,UP主 “集体变绿”
  18. 第七周项目5排队看病模拟
  19. pygame战棋游戏制作之战棋棋子设置(二)
  20. “兼并”还是“合作” 宏碁方正各怀鬼胎

热门文章

  1. Spring依赖注入的模式和类型
  2. android修改用户名和密码错误,Android应用开发Android Studio 修改用户名、密码、URL等操作教程...
  3. MyBatsi-Mapper映射文件
  4. 什么是DBA[WHAT'S MEANING OF DBA]
  5. 海南省重点公共场所WiFi覆盖率达到97.7%
  6. GoLang strings包函数用法
  7. 第2个程序:用C语言实现点亮一盏led
  8. 动态加载jar包(一)
  9. XP搭建winwebmail具体步骤
  10. 【毕业设计】asp.net基于工作流引擎的系统框架设计开发(源代码+论文)