2013-09-05
昨天搞域名,没有写blog,愧疚蛮久,还好域名搞定了...嘻嘻
继续行程,记录点滴...
: tomcat6.0.x已经通过svn导入eclipse运行,接下来就是阅码之旅。,每个人阅读源码方式可能不尽相同,我第一次,没啥经验,凭空想象自己的方式:了解程序结构,运行程序,跟踪源码,设置断点,打印输出,验证假设,弄清楚启动过程,了解数量流向。
我们都知道tomcat调度Servlet来处理来自HTTP的请求,我猜想原理是这样的:Tomcat启动ServerSocket监听网络端口,tomcat分配线程处理来自HTTP的请求,线程负责解析请求,在请求上调用过滤器,使用反射调用Servlet的service方法来处理请求完成响应,tomcat如何实现调度功能?如何实现处理HTTP协议的请求?结构框架如何。
先看看tomcat6.0.x的框架结构图,在网上看到过多种框架图,有记忆的有两种。
来自[忘记来自哪个blog了]
第一张图给以的信息很少,只标出了Server,Server下面的多个Service,以及Service中的组件,结构层次很清晰,但是不够细,例如Engine,Host,Context等组件没有画出来,以及他们之间的层次关系也没有,我喜欢第二张图,因为第二张展示了tomcat的结构层次图,从Server到servlet全都画出来,一看就明白他们的层次关系,同时第二张图中还有数据流图,从起点到servlet,再从servlet回来,线路明了,能减少精力在数据流的分析,当然第二张图也有的组件没有画出来,比如Logging,Naming等。
我们都知道tomcat的基本就是容器,通过容器来管理资源,调度信息,控制数据流向,tomcat的框架是由容器构成的,往框架往里面替补容器,容器连起来构成一个处理请求的生产线。图中传递很多信息,容器之间的关系,数据流向,组件结构,tomcat的框架结构直接展现出来。
还有一张必须看的图
来自Tomcat启动过程原理详解
这张结构图也是描述tomcat框架结构的,他从另一个维度来描述,通过网络端口来源,逐级分解结构,从图上我们可以看出,一个Server可以有多个Service,但一个Service下面只能有一个Engine,一个Engine下面可以有多个Host,一个Host下面可以有多个Context,数据流向也可以从图中获知,请求从Connector中开始,一直通过容器传递到Context中,再有Context传递给Servlet,还有一个就是Server会启动一个ServerSocket来监听8005端口,负责监听是否要关闭Server。
今天就到这里了,欢迎吐槽...
是否每一天都是新,我们要如何改变
来源:oschina
链接:https://my.oschina.net/u/171953/blog/159502