写这个系列最初的想法是,用了那么多的开源产品了,总该回报一下社会。虽然水平有限不能做个开源项目出来,但研究一下开源产品、记录一些心得,或许将来对有能力做开源项目的人有点帮助。毕竟中国对开源世界的贡献实在太小,我写些中文版的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”
导入后,会出现很多编译错误,一般都是相关的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
org.apache.catalina:Connector,Service,ContainerBase,Engine,Context,Wrapper,Pipeline....
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》这本书后的一些笔记
http://blog.csdn.net/wangchengsi/archive/2009/03/03/3953054.aspx
http://blog.csdn.net/wangchengsi/archive/2009/03/11/3981861.aspx
http://blog.csdn.net/wangchengsi/archive/2009/03/12/3984058.aspx
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