Tomcat分析--Connector

Connector是使用了socket来进行连接,它接收请求并将他们封装成request和response对象来处理。Request和Response封装之后交给Container处理,Container就是servlet容器,处理之后再返回给Connector,最后Connector在使用socket将处理结果返回给客户端,这样请求就完成了。

Connector在创建时创建ProtocolHandler,然后在生命周期的相关方法中调用ProtocolHandler的相关生命周期方法。Connector的使用方法是通过Connector标签配置在conf/server.xml的文件中。

Connector的结构图如下


ProtocolHandler--用于处理请求,不同的protocolhandler代表不同的连接类型。protocolhander有一个抽象实现类AbstractProtocol, AbstractProtocol下有三种类型:Ajp,Http和Spdy.

     Endpoint--用于处理socket连接

     Processor--用于将endpoint接收的socket封装成request和response.

     Adapter--用于将request和response对象传给container.

 

其中Endpoint继承自AbstractEndpoint,它里面定义了Acceptor和AsyncTimeout两个内部类和一个Handler接口。

Acceptor用于监听请求

AsyncTimeout用于检查异步request的超时

Handler用于处理接收到的socket,再调用processor进去处理

结构如下:




来做一个简单的webserver吧

我们需要:

1.一个启动类Bootstrap

2. Connector(这个例子主要说它)

HttpConnector

        HttpProcessor

        HttpRequest

        HttpResponse


1. HttpProcessor

它要做的是创建一个HttpRequest,一个HttpResponse,解析Http请求的url和head,并给httpRequest对象。如果是要处理一个servlet就调用ServletProcessor就调用servlet的service方法.如果请求的是静态资源,就通过StaticResourceProcessor发送静态资源

public void process(Socket socket) {
    SocketInputStream input = null;
    OutputStream output = null;
    try {
      input = new SocketInputStream(socket.getInputStream(), 2048);
      output = socket.getOutputStream();

      // create HttpRequest object and parse
      request = new HttpRequest(input);

      // create HttpResponse object
      response = new HttpResponse(output);
      response.setRequest(request);

      response.setHeader("Server", "Pyrmont Servlet Container");

      parseRequest(input, output);
      parseHeaders(input);

      //check if this is a request for a servlet or a static resource
      //a request for a se
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值