1、Catalina有两个主要模块:
(1)连接器(connector):
- 解析http
- 使servlet能够获取到请求头、cookie、参数/值等信息
- 本章中连接器和容器将分开
(2)容器(container)
2、三个模块
(1)启动模块:BootStrap类,负责启动应用程序
(2)连接模块:
- 连接器及其支持类(HttpConnector::等待Http请求的工作,HttpProcessor)
- Http请求的类(HttpRequest)及其支持的类
- Http响应的类(HttpResponse)及其支持的类
- 外观类(HttpRequestFacade、HttpResponseFacade)
- 常量类
(3)核心模块
- ServletProcessor类
- StaticResourceProcessor类
3、连接器需要解析http请求的所有信息
- 为了提高效率,参数被真正调用前是不会被解析的
4、使用SocketInputStream类(InputStream的包装类)
- 从套接字里面的InputStream读取字节流
5、SocketInputStream类俩重要方法
- readRequestLine():返回请求第一行内容:POST /example/test.jsp HTTP/1.1
- 字节流从前向后调取,readRequestLine 必须在 readHeader 前调用
- readHeader():每次调用返回一个 key/value 直到所有请求头读完
- readRequestLine() 返回值是 HttpRequestLine
- readHeader () 返回值是 HttpHeader