连接器
本章主要构建一个tomcat4中默认连接器的简化版。
主要演示了一下如何去解析http的内容。
StringManager类
一个基于properties文件、支持国际化的单例模式的字符串信息管理器。
应用程序
HttpConnector类
1 | public class HttpConnector implements Runnable { |
HttpProcessor类主要完成以下操作:
- 创建HttpRequest对象
- 创建HttpResponse对象
- 解析http请求第1行内容和请求头,填充HttpRequest对象
- 将request/response传递给ServletProcessor#process()方法,向客户端发送响应
HttpRequest类
HttpRequest类实现了javax.servlet.HttpServletRequest接口,并使用一个外观类HttpRequestFacade。
解析http请求主要分为如下步骤:
读取socket输入流
1
SocketInputStream input = new SocketInputStream(socket.getInputStream(), 2048);
解析请求行
解析http请求第一行内容,用char[]数组而不是字符串对象以减少字符串操作开销,主要考虑了相对路径、键值对形式的查询字符串、jsessionid等问题。
解析请求头
逐行循环读取http请求内容直到出现空行间隔,将每行按照字符规则定义成键值对类型的header[]保存,并将如content-length,content-type等一些特殊字段记录到对应的属性。
解析cookie
获取参数
利用一个继承HashMap并扩展了锁机制的map保存参数列表,根据content-type,encoding解析请求体
HttpResponse类
提供了一个finishResponse()方法flush输出流,以解决最后一行输出内容不能输出的bug。