Tomcat学习3.1(连接器)

Tomcat4源代码下载地址:http://pan.baidu.com/s/1qXKfbjQ

本节将对上一节对程序做修改,使用连接器的作用:创建request和response对象,并将它们作为servlet接口的service()方法的参数传入;解析Http请求头,使servlet实例能够获取到请求头、cookie和请求参数等信息。

从本节开始,所有的程序都会按照模块进行划分,本章的应用程序包含3个模块:连接器模块、启动模块和核心模块。

连接器模块中的类,包括:1、连接器及其支持类(HttpConnector和HttpProcessor);

                                               2、表示HTTP请求的类(HttpRequest)及其支持类;

                                               3、表示HTTP响应的类(HttpResponse)及其支持类;

                                               4、外观类(HttpRequestFacade和HttpResponseFacade);

                                               5、常量类(Constant)。

核心模块包含:ServletProcessor类和StaticResourceProcessor类。

启动模块包含一个类:Bootstrap类。

以下是本节程序简化的UML类图:


本节程序的包结构如下:

整个程序从Bootstrap启动,新起一个线程运行HttpConnector,HttpConnector运行时序简图图如下:


SocketInputStream是java.io.InputStream的包装类,包含两个重要的方法:readRequestLine和readHeader。

readRequestLine:读取http请求第一行,包含,URI、请求方法和HTTP版本信息(将这些信息全部以HttpRequestLine类的形式封装)。

readHeader:读取请求头信息,每次调用readHeader方法都会返回一个名/值对(将这些信息以HttpHeader类的形式封装)。

在HttpProcessor中,首先会构造一个HttpRequestLine实例,但是在这个实例中没有包含任何信息,通过HttpProcessor的parseRequest(input, output)将http请求的第一行传递给刚才的HttpRequestLine实例。

通过HttpProcessor的parseHeaders(SocketInputStream input)方法,循环读取http请求中所有请求头信息,最后将请求头的名/值通过HttpRequest的addHeader(String name, String value)方法放入一个HashMap中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值