深入剖析Tomcat(三)

连接器

*本章将会建立一个连接器
增强第二章的application
用一种更好的方法创建request和response对象*

兼容servlet2.3和2.4规范的连接器必须要负责创建javax.servlet.http.HttpServetRequest和javax.servlet.http.HttpServletResponse实例,并传入service方法 //??不大明白在说什么
连接器并不知道第2章的servlet的对象的类型
本章application中,连接器解析http头,使servlet能获取到头cookie等信息

StringManager类

Tomcat 把错误消息保存到properties文件中
并且划分到不同的包中
每个properties都是用org.apache.catalina.StringManager类的一个实例处理的
获取错误信息

public String getString(String key);

应用程序

代码量大,要把握全局
不需要逐个看下去,有点知道构造方法和用法就行

启动模块

只用一个类 Bootstrap类 负责启动application

连接模块

可分为五个类型
- 连接器及其支持类 HttpConnector和HttpProcesser
- Http请求类(HttpRequest)及其支持类
- Http响应类(HttpResponse)及其支持类
- 外观类(HttpRequestFacade和HttpResponseFacade类)
- 常量类

核心模块

  • servletProcessor类

- StaticResourceProcessor类

整体把握

  • 启动 Bootstrap类main方法中 实例化HttpConnector 并调用start方法开启线程
  • 创建serverSocket类 等待HTTP请求
  • 创建HttpProcessor实例 并且调用process方法
  • process方法中 创建HttpRequest和HttpResponse 解析请求
  • 静态请求
  • servlet请求调用service方法

解析http请求
- 读取套接字的输入流

 input = new SocketInputStream(socket.getInputStream(), 2048);
之所以使用SocketInputStream类就是为了调用其readRequestLine()方法和readHeader方法
  • 解析请求行
private void parseRequest(SocketInputStream input, OutputStream output)
  • 解析请求头
    新类HttpHeader
    • 无参构造
    • 传参给SocketInputStream的readHeader方法
    • 获取请求头的名字和值
String name = new String(header.name, 0, header.nameEnd);
String value = new String(value.name, 0, value.nameEnd);
  • 解析Cookie
    请求头是Cookie: username password
    org.apache.catalina.util.RequestUtil类实现
  • 获取参数
    org.apache.Catalina.util.ParameterMap类实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值