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源码分析——请求原理分析(上)的主要内容,如果未能解决你的问题,请参考以下文章