Tomcat源码学习

原创 2008年09月23日 04:20:00

前言·想法

写这个系列最初的想法是,用了那么多的开源产品了,总该回报一下社会。虽然水平有限不能做个开源项目出来,但研究一下开源产品、记录一些心得,或许将来对有能力做开源项目的人有点帮助。毕竟中国对开源世界的贡献实在太小,我写些中文版的tomcat源码资料,就算没人用得着,我也当一种耐心的锻炼吧。因为真的要把这个系列写完整,肯定是相当考验我的耐心和毅力。虽然未来有各种不可预期的变故让这个系列最终虎头蛇尾,然而禅语云:“看脚下”,我就先沿着这条路走下去再说。

哪里写得不妥或者错误之处,还请朋友们及时指正

动手

先八卦一下“tomcat”这个名字的由来,从tomcat的wiki页面可以找到一段“官方说明”:

How did Tomcat get its name?

He (James Duncan Davidson) came up with "Tomcat" since the animal represented something that could take care of itself and fend for itself. That's how he came up with the name.

看来是希望“tomcat”能够自谋生路,其实这也是开源项目最需要关注和解决的问题之一:如何实现良性发展

 

要研究tomcat源码,第一步自然是下载它的源代码,这个可以直接在tomcat官方网站获得源代码和二进制文件

然后,在eclipse中,新建一个普通的java项目,叫TomcatSource,或者将源码解压到TomcatSource的根目录下的src目录(或者你任意命名的目录),然后在项目的buildpath中设置源码的路径:在Source选项卡中“Add Folder”

2008-09-07_134829

导入后,会出现很多编译错误,一般都是相关的ant和junit的包找不到,一般这些包可以下载ant和junit,从里面的lib中拷贝出来,放入项目的libraries中即可;或者在网上搜搜相关的包名。其实这些错误不影响我们查看源代码,因为我们不打算编译源文件,只是太多的红线影响视觉效果

另一种方式,则是直接通过ant自动编译tomcat源代码,方法可以参考这个链接:

 http://blog.ccidnet.com/blog-htm-do-showone-uid-4092-type-blog-itemid-263093.html

参考资料

关于tomcat源码的研究,百度上也有几篇写得很不错的文章,对于了解tomcat的整体架构很有帮助,现收集如下:

tomcat的整体架构、运行机理

http://www.bitscn.com/java/tomcat/200605/23339.html

tomcat的请求处理流程

http://bbs.chinaunix.net/viewthread.php?tid=448117

http://www.chinaitpower.com/A/2002-04-11/19531.html

JMX在tomcat中的运用

http://blog.ccidnet.com/blog-htm-do-showone-uid-4092-type-blog-itemid-384094.html

 

正文·笔记目录

研究tomcat,我打算根据源码中的模块和包名进行分类和学习。为了便于整理和浏览,在这里做一个目录,以后有新文章上来后,会更新这个目录

由于tomcat的代码量对我等凡人来说实在不小,研究起来难免顾此失彼,研究模式也可以是深度优先或者广度优先或是跳跃式思维,加上个人心情和时间因素,因此很难在短时间内把一个模块或者包的全部内容、方方面面都研究透,但会不定期地补充,尽量将tomcat各个模块的核心组件展现出来。

总之,希望这份学习笔记可以日趋完善

  • 启动框架:

org.apache.catalina.startup:Bootstrap,Catalina,Server....

简要介绍Bootstrap、ClassloaderFactory和Catalina:http://blog.csdn.net/wangchengsi/archive/2008/09/20/2966850.aspx

  • 容器架构Container:

org.apache.catalina:Connector,Service,ContainerBase,Engine,Context,Wrapper,Pipeline....

  • 连接器Coyote框架:

org.apache.coyote & org.apache.coyote.http11 & org.apache.coyote.http11.filters:Request,Response,ActionHook,ProtocolHandler....

Coyoto简介:http://blog.csdn.net/wangchengsi/archive/2008/09/24/2973012.aspx

Coyoto的Http1.1实现:http://blog.csdn.net/wangchengsi/archive/2008/09/29/2995536.aspx

Coyoto中过滤器的设计:http://blog.csdn.net/wangchengsi/archive/2008/09/29/2995048.aspx

  • 网络连接组件:

最基本的socket连接池JIOEndpoint:http://blog.csdn.net/wangchengsi/archive/2008/10/02/3010036.aspx

 

  • 缓存:

org.apache.tomcat.util.buf

简单介绍tomcat的缓存:

http://blog.csdn.net/wangchengsi/archive/2009/02/18/3904586.aspx

附录:《How Tomcat Works》

这里是看了《How Tomcat Works》这本书后的一些笔记

  • 介绍《How Tomcat Works》

 http://blog.csdn.net/wangchengsi/archive/2009/03/03/3953054.aspx

  • 读书笔记(一),第一章和第二章,simple server and container

http://blog.csdn.net/wangchengsi/archive/2009/03/11/3981861.aspx

  • 读书笔记(二),第三章,simple Connector

http://blog.csdn.net/wangchengsi/archive/2009/03/12/3984058.aspx

 

  • 读书笔记(三),第四章,Tomcat's default Connector

http://blog.csdn.net/wangchengsi/archive/2009/03/22/4013821.aspx

 

  • 读书笔记(四),第五章,容器初探

http://blog.csdn.net/wangchengsi/archive/2009/03/31/4038274.aspx

  • 读书笔记(五),第六章,生命周期接口

http://blog.csdn.net/wangchengsi/archive/2009/04/15/4077794.aspx

虚拟设备驱动程序结构(Vxd教程3)

虚拟设备驱动程序结构 由 Ryo 翻译,发表于 http://asm.yeah.net,英文版本来自 [Iczelions Win32 Assembly Homepage] 现在大家对vmm和vx...
  • jiangtao
  • jiangtao
  • 2000-09-05 13:39:00
  • 2710

看tomcat源码的一点理解

http连接的表现就是socket对象 客户端连接服务端时,先随机分配一个端口去连接服务器的80端口,然后服务器会另外随机分配一个端口与客户端通信,该端口由一个socket持有。在程序上的表现就是:...
  • u012107143
  • u012107143
  • 2017-05-04 12:39:30
  • 570

用idea查看tomcat源码

最近在自己写一个简易版tomcat时,遇到了一些问题,想不明白,所以打算看看源码在写,我们平时用的是idea,在把tomcat7源码导入到idea中时遇到了很多问题,使我对idea又熟悉了不少。下面是...
  • LZH984294471
  • LZH984294471
  • 2016-05-09 14:15:18
  • 2739

tomcat源码下载并导入eclipse

本文主要参考这篇博客 http://jackycheng2007.iteye.com/blog/1477845,但是整个过程遇到了另外的问题,特记录如下 1. 获取源代码    方式一:从官网htt...
  • cuidiwhere
  • cuidiwhere
  • 2013-10-07 00:21:55
  • 25849

tomcat源码阅读(一) 入口

程序启动入口: org.apache.catalina.startup.Bootstrap的main方法,其最终会调用到org.apache.catalina.startup.Catalina的loa...
  • subuser
  • subuser
  • 2015-11-10 18:17:55
  • 2116

tomcat7源码分析

tomcat7源码分析本篇分为六个部分: tomcat基本框架 tomcat启动流程简介 tomcat启动流程源码分析 tomcat处理一个请求过程分析 ....
  • mingliangniwo
  • mingliangniwo
  • 2017-01-16 16:21:14
  • 1474

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

在《TOMCAT7.0源码分析——请求原理分析(上)》一文中已经介绍了关于Tomcat7.0处理请求前作的初始化和准备工作,请读者在阅读本文前确保掌握《TOMCAT7.0源码分析——请求原理分析(上)...
  • beliefer
  • beliefer
  • 2016-07-07 13:33:15
  • 16103

tomcat源码 tomcat本来就是开源的

  • 2008年09月19日 01:03
  • 264B
  • 下载

Tomcat源码阅读

Tomcat是一款非常优秀的servlet容器或者说是服务器,相信很多人都能非常熟练的使用它。但是对于技术有基情的人是不会仅仅停留在熟练使用的阶段的。为了不只当一个熟练工,那么我们就要去研究它运行的原...
  • jzq114
  • jzq114
  • 2016-06-25 15:20:30
  • 760

Tomcat源码分析--启动过程

一直使用Tomcat确不知道它的运行原理。看了源码后对它的启动过程有了一定的了解,特来记录一下。      首先先介绍一下Tomcat的架构图:       Tomcat主要有两个核心的组件,一个是...
  • c275046758
  • c275046758
  • 2016-04-26 16:52:09
  • 6244
收藏助手
不良信息举报
您举报文章:Tomcat源码学习
举报原因:
原因补充:

(最多只允许输入30个字)