博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tomcat学习笔记之默认连接器
阅读量:7097 次
发布时间:2019-06-28

本文共 1356 字,大约阅读时间需要 4 分钟。

hot3.png

1、http 1.1的新特性

(1)持久连接

  • 当下载了页面后,服务器不会立即关闭连接
  • 等待被该页面引用的所有资源下载完(同一个连接下载)
  • 考虑到 打开/关闭 http 连接系统开销很大
  • 故web 服务端、网络、客户端都节省了大量的时间和工作量
  • 默认使用持久连接,显式请求头:

143210_wNmB_3847203.png

(2)块编码

  • 建立持久连接,服务器可以从多个资源发送字节流,客户端可以使用该连接发送多个请求
  • 发送方必须在每次发送时、在请求头或响应头添加content-length 头信息
  • http 1.0 中不需要content-length ,读到-1 返回关闭
  • http 1.1 transfer-encoding 头信息,指明字节流会分块发送

144338_50YD_3847203.png

  • 第一块:1D 是16进制数,代表10进制的29个字符
  • 第二块:9个字符,看到0\r\n 表明结束

(3)状态码100的使用

  • 发送请求体之前,发送如下请求头,等待服务器确认

144625_OYqM_3847203.png

  • 服务器响应,代表可以接收并处理请求

144750_WZ8P_3847203.png

2、Connector 接口

  • 提供很多接口的声明,包括关联容器、request、responce等

145044_wj3y_3847203.png

3、HttpConnector 类

  • 实现了 org.apache.catalina.Connector 接口(可以使用catalina 的连接器)
  • 实现了 java.lang.Runnable 接口(确保实例在自己线程里运行)
  • 实现了 org.apache.catalina.LifeCycle 接口(维护每个catalina  组件的生命周期)
  • 创建HttpConnector 实例后,调用 initialize()、start() 方法(俩方法生命周期内执行一次)
  • initialize(),调用open 方法从一个套接字工厂获取一个实例
  • 每个HttpConnector  实例维护HttpProcesser 对象池,可以同时处理多个http 请求
  • 每个HttpProcesser  实例运行在自己的线程中 

4、HttpProcesser 对象池存储在如下栈里(java.io.Stack):

151705_9dos_3847203.png

  • 最小对象池数量和最大数量
  • 最开始初始化最小数量对象
  • 超过最大后,引入的http 请求会被忽略

151804_vYXR_3847203.png

  • 每个HttpProcesser 实例负责解析请求行和请求头,填充Request 对象
  • 关联一个Request 和Response 对象

5、提供Http 请求服务

  • 获取一个HttpProcesser 实例

152911_Bbsx_3847203.png

6、HttpProcesser 类

  • assign() 方法的异步实现
  • process() 方法负责解析http 请求,并调用响应servlet 容器的invoke() 方法
  • 实现了java.lang.Runnable 接口,每个实例运行在自己的线程里,叫:处理器线程
  • assign 方法和await  方法对比

195559_WxcB_3847203.png

7、Request 对象

  • 实现了org.apache.catalina.Request 接口

8、处理请求

  • 解析连接、解析请求、解析请求头
  • 通过连接器可以设置缓存区的大小

9、简单的容器实现 SimpleContainer

  • 实现了org.apache.catalina.Container

转载于:https://my.oschina.net/u/3847203/blog/1824796

你可能感兴趣的文章
micro:bit 的完整硬件方案
查看>>
用Class ID做网络分流
查看>>
nginx 502错误
查看>>
VS2013环境下Boost库配置
查看>>
F5多出口配置
查看>>
Android Studio 第六十二期 - Android框架
查看>>
PCIE hotplug 调试小结
查看>>
我的友情链接
查看>>
输出二维环形数组中最大子数组和
查看>>
用户调查报告
查看>>
servlet 单例多线程
查看>>
Linux命令模拟Http的get或post请求
查看>>
Navicat使用教程:使用Navicat Query Analyzer优化查询性能(第2部分)
查看>>
mongoDB 在windows平台下安装成系统服务
查看>>
linux学习第八周总结
查看>>
第二次测试题
查看>>
Java 处理异常 9 个最佳实践,你知道几个?
查看>>
Apache 不能列目录解决。
查看>>
如何永久的修改主机名
查看>>
NSSearchPathForDirectoriesInDomains用法(后台缓存)
查看>>