Tomcat7.0源码分析——请求原理分析(上)

Posted 泰山不老生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tomcat7.0源码分析——请求原理分析(上)相关的知识,希望对你有一定的参考价值。

前言

  谈起Tomcat的诞生,最早可以追溯到1995年。近20年来,Tomcat始终是使用最广泛的Web服务器,由于其使用Java语言开发,所以广为Java程序员所熟悉。很多早期的J2EE项目,由程序员自己实现Jsp页面或者Servlet接受请求,后来借助Struts1、Struts2、Spring等中间件后,实际也是利用Filter或者Servlet处理请求,大家肯定要问了,这些Servlet处理的请求来自哪里?Tomcat作为Web服务器是怎样将HTTP请求交给Servlet的呢?

  本文就Tomcat对HTTP的请求处理细节进行分析。

  提示:阅读本文前,请确保首先理解了《Tomcat7.0源码分析——生命周期管理》中的内容。

Connector的初始化

  根据《Tomcat7.0源码分析——生命周期管理》一文的内容,我们知道Tomcat中有很多容器,包括Server、Service、Connector等。其中Connector正是与HTTP请求处理相关的容器。Service是Server的子容器,而Connector又是Service的子容器。那么这三个容器的初始化顺序为:Server->Service->Connector。Connector的实现分为以下几种:

  • Http Connector:基于HTTP协议,负责建立HTTP连接。它又分为BIO Http Connector(是Tomcat的默认Connector)与NIO Http Connector两种,后者提供对非阻塞IO与长连接Comet的支持。
  • AJP Connector:基于AJP协议,AJP是专门设计用于Tomcat与HTTP服务器通信定制的协议,能提供较高的通信速度和效率。如与Apache服务器集成时,采用这个协议。
  • APR HTTP Connector:用C实现,通过JNI调用的。主要提升对静态资源(如html、图片、CSS、JS等)的访问性能。现在这个库已独立出来可用在任何项目中。APR性能较前两类有很大提升。
现在我们直接来看Connector的initInternal方法吧,见代码清单1。

以上是关于Tomcat7.0源码分析——请求原理分析(上)的主要内容,如果未能解决你的问题,请参考以下文章

Tomcat7.0源码分析——Session管理分析(上)

Tomcat7.0源码分析——生命周期管理

Tomcat7.0源码分析——启动与停止服务

TOMCAT8源码分析——处理请求分析(下)

Hadoop之HDFS原理及文件上传下载源码分析(下)

OkHttpOkHttp 源码分析 ( 同步 / 异步 Request 请求执行原理分析 )