本来第三章, 在28号已经看完了, 但是觉的看的有点晕, 理解的不够,
就决定在看一遍, 呵呵, 坚持啊, 内容越来越多了,网上说tomcat源码有20-30万行代码
我不能完全看完, 但是其中的机制和核心模块还是要了解的, 坚持看下去。。。
第三章-- 连接器
书中继续改造第二章的代码和继续扩展功能, 并且功能开始划分模块
connector 连接器
连接器和它的支撑类(HttpConnector和HttpProcessor)。
指代HTTP请求的类(HttpRequest)和它的辅助类。
指代HTTP响应的类(HttpResponse)和它的辅助类。
Facade类(HttpRequestFacade和HttpResponseFacade)。
Constant类
startup 启动应用
Bootstrap
core
由这两个类组成: ServletProcessor和StaticResourceProcessor
流程是:
1.启动程序 Bootstrap创建一个HttpConnector对象,侦听http请求,然后HttpConnector对象获取socket套接字对 象
2. 创建一个HttpProcessor对象,调用它的process方法 请求通过SocketInputStream获取输入流和socket的outputStream输出流创建Http的Request对象和Respon对象。
3. 获取请求行和请求头, 初始化到httpRequest,HttpResponse属性, 便于客户端调用
4.判断uri资源,找到处理servlet处理
5. 在异常处理时, 通过配置文件放到异常里面,StringManager类来获取指定包的配置文件的异常key,返回一个value给调用者。
所用使用的类的列表如下:
core
ServletProcessor 动态资源请求处理servlet
StaticResourceProcessor 静态资源请求处理servlet
connector
RequestStream
ResponseStream
ResponseWriter
Constants 静态公共final公共资源
HttpConnector 连接器提供入口给容器启动,线程类, 监听请求
HttpHeader 在解析请求头时,对象封装类
HttpProcessor 有点像控制器,调用资源封装请求对象和响应对象, 调用处理servlet处理
HttpRequest 请求对象, 实现httpServletRequest接口
HttpRequestFacade 跟上面一个实现相同接口
HttpRequestLine 请求行封装类
HttpResponse 响应对象,底层都是通过流实现的, 但是响应给客户端通过这个类实现。
HttpResponseFacade 和上面一样, 实现HttpServletResponse接口
SocketInputStream 有两个重要的方法
readRequestLine和readHeader。readRequestLine返回一个HTTP请求的第一行
readHeader的返回值是一个HttpHeader对象
LocalStrings.properties 异常key-value 文件。