淘宝主要技术总结.doc

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Tomcat 5源码分析 代码准备与DEBUG调试配置 官方下载地址: HYPERLINK "http://archive.apache.Org/dist/tomcat/tomcat-5/v5.0.28/src/"http://archive.apache.Org/dist/tomcat/tomcat-5/v5.0.28/src/ 毕竟太老了(04年的东西),很多jar依赖祁下不下来了。建议使用我修正后的 source,下载后直接 根冃录ant即可完成build。为了方便跟踪与调试,bin冃录下新建一个debug,后 面加上: set JAVA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8787 即开启JDPA,全称Java Platform Debugger Architecture (关丁JPDA,这里还有篇论文可以看)同时等待 DEBUGER连接后再继 续(如果你使用的是我提供的,直接运行debug.bat就可以了)。Eclipse里新建 Remote Debug,端口号 8787。这样就可以在Eclipse里调试Tomcat 5 了。 总体结构 从下至上: server:代表着整个Catalina (Tomcat内核代号)系统,系统基础,启动入口, 全局资源, 下属serviceo注意这里的port是管理用的(比如shutdown什么的),不是ht(p监 听端口。 seivice:代表一种服务,比如HTTP服务、JMX、JPDA,其本质上就是一组 connector, 接收相应的请求后递交给上层container进彳亍处理。一*个server可以有多个service, {R一个 service 只对应一个containero engine> host> context、wrapper: Tomcat 的容器思想,每个容器实现Container 接口,一 个容拥有自己的资源配置、装载与事件分发机制。在实际中,事件的分发一般通 过“观察者”模式, 而上层数据则通过pipeline (后再详说)。 (图3注:成员未全部列出) 容器与生命周期管理思想 容器是tomcat 5中的重耍思想。一个容器是负责处理加工来自外部的请求并将结 果返回的模块。所有的容 器都实现了Container这个接口,其采用了典型的Compositor模式。成员中其中较 重耍的是pipeline与 resourceo 一个请求是通过invoke方法到达的,Host、Wrapper> Context都继承 ContainerBasec 前者 依次被后者包含,Tomcat 5 对这儿个的默认实现均称为StandardXXX,如StandardEngine。 Invoke方法 在ContainerBase 中的实 现即简单的调用pipeline的invoke,如下: 通过执彳亍pipeline的valve,执彳亍相应的操作。上层数据的递交就是通过pipeline实 现的。容器还采用了 Observer模式来分发消息,每当容器发生图3所示事件时,都会通知listener0其 实不仅是容器,这种设 计思想还贯穿于整个设计中。 再来说说生命周期管理。在启动tomcat的时候,我们能从控制台上明显看出,启 动分两个步骤:init与start。 Tomcat模块生命周期管理都实现了Lifecycle这个接口,其定义了stail()与stop() 方法,不过奇怪的是init() 在lifecycle中却没有定义,但儿本上实现了lifecycle的类都有init()方法(所以我 觉得这个也应该算在 lifecycle里面的)。因此,当启动时,只耍递归的调用init()与stag方法,就可以 完成启动,注销时则递 归地调用stop()即可。与容器的事件设计思想相同,生命周期的每步也会触发事件 消息,只要订阅对应的 事件,就可以非常容易地知晓其某阶段的进展。非常方便、简洁! HTTP (TCP)连接管理详细 HTTP使用的是TCP连接。TCP是网联层协议,是端到端的。Tomcat使用的是 最原始的Socket进行连 接监听,^[.ServerSocket.ServerSocket(int,int)。早些时候Tomcat 使用的是 一个线程监听,多个 工作线程的模式:即一个线程专门负责响应连接谙求,再递交给工作线程进行处 理。Tomcat 5后开始使用线程池取代了原有的方案。如下图所示: 早期的方式 新方式 那么单从结构來说,新的方式相对了老方法而言,消减了线程Z间不必须的关联 关系,使单个请求的处理 流程完全独立。同时我们看到,在老方式里,一旦listener线程挂掉,那么整个t

文档评论(0)

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

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

1亿VIP精品文档

相关文档