Tomcat7源码分析.ppt

  1. 1、本文档共68页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Tomcat7源码分析

目 录 1、背景介绍 2、Tomcat源码目录结构 3、Tomcat体系结构 4、Tomcat源码解析 背景介绍 自从JSP发布之后,推出了各式各样的JSP引擎。Apache Group在完成GNUJSP1.0的开发之后,开始考虑在SUN的JSWDK基础上开发一个可以直接提供Web服务的JSP服务器,当然同时也支持Servlet,这样Tomcat就诞生了。Tomcat是jakarta项目中的一个重要的子项目,其被JavaWorld杂志的编辑选为2001年度最具创新的java产品,同时它又是sun公司官方推荐的servlet和jsp容器。 Tomcat源码目录结构 Tomcat体系结构 Connector组件以及与Container组件是Tomcat的核心。 (-表示一对多 -表示一对一) Server-Service Service-Connector Service-Engine Engine-Host-Context Context-Wrapper (Servlet的包装器) Tomcat源码解析 由于Tomcat的源码及功能点因为实在过于庞大,所以下面的源码分析会根据Tomcat的启动、请求处理、关闭三个流程来进行具体分析,尽可能把各个模块的核心组件都展示出来。 Tomcat源码解析 在Tomcat启动时,重点功能如下: 1、初始化类加载器:主要初始化Tomcat加载自身类库的StandardClassLoader。 2、解析配置文件:使用Digester组件解析Tomcat的server.xml,初始化各个组件(包含各个web应用,解析对应的web.xml进行初始化)。 Tomcat源码解析 下面是我对Tomcat启动时首先加载的类Bootstrap类中的main方法进行的分析: Tomcat源码解析 从以上的代码中,可以看到在Tomcat启动的时候,执行了三个关键方法即init、load、和start。后面的两个方法都是通过反射调用org.apache.catalina.startup.Catalina的同名方法完成的。 首先分析一下Bootstrap的init方法,在该方法中将会初始化一些全局的系统属性、初始化类加载器、通过反射得到Catalina实例,在这里重点看一下初始化类加载器的initClassLoaders()。 Tomcat源码解析 在以上的代码中,可以看到初始化了StandardClassLoader类加载器,这个类加载器详细的会在后面关于Tomcat类加载器机制中介绍。 Tomcat源码解析 之后来看一下load: Tomcat源码解析 在以上的代码中,关键的任务有两项即使用Digester组件按照给定的规则解析server.xml、调用Server的init方法,而Server的init方法中,会发布事件并调用各个Service的init方法,从而级联完成各个组件的初始化。 Tomcat源码解析 来看下StandardService的startInternal方法: Tomcat源码解析 启动Tomcat各级容器会依次先启动StandardEngine -- StandardHost -- StandardContext(代表一个WebApp应用),因为我们比较关心我们的Web应用是在哪里被初始化回调的,所以重点看下StandardContext的startInternal()方法。 Tomcat源码解析 Tomcat源码解析 Tomcat源码解析 Tomcat源码解析 Tomcat的各级容器初始化完成后,就开始对Connector的初始化。让我们来看看Connector的initInternal方法: Tomcat源码解析 Http11Protocol的init方法: 在这里面endpoint.setHandler(cHandler)是设置连接管理器。 Tomcat源码解析 最终的初始化方法都会调到JIoEndpoint的bind方法,网络初始化和对请求的最初处理都是通过该类及其内部类完成的。在下面的代码中,我们可以看到此时初始化了一个ServerSocket对象,用来监听绑定端口的请求。 Tomcat源码解析 来看看JioEndpoint的startInternal()方法。从以下的代码可以看到,如果没有在server.xml中声明Executor的话,将会使用内部的一个容量为200的线程池用来后续的请求处理,并且按照参数acceptorThreadCount的设置,初始

您可能关注的文档

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档