设为首页 收藏本站
查看: 615|回复: 0

[经验分享] Tomcat阅读笔记

[复制链接]

尚未签到

发表于 2017-1-17 10:10:11 | 显示全部楼层 |阅读模式
  通读Tomcat之后留下一点点东西,谈不上分析,只是自己学习的一个笔记,重要与否因人而异,以下都是我认为比较重要并且适合自己学习的。
  1、Tomcat的生命周期和启动过程
tomcat是组件化开发的典范,组件的构成可以查看conf下的server.xml。tomcat所有的组件都继承了Lifecycle接口,服务的启动从上层的组件开始init、start,再init、start当前组件的下一层,后面的组件以此如此,所以它的生命周期是由最上层的Server服务(容器)决定的。
  
2、Http11Protocol——>Acceptor线程对象——>处理线程Work对象
Acceptor只是单纯的负责监听来自Socket端口的TCP/IP请求,然后把复杂的处理逻辑委托给Worker去处理,接着去接收下一个请求,有点类似于接收器模式与传统的接收器模式不同的是Worker不是由工厂产生的。
  
3、ActionHook   
组件或者对象的状态较多,并且状态切换时有一些共通的业务处理逻辑,适合引入ActionHook模式,类似于触发器的钩子,这类设计方法在wordpress和jvm中都有使用。
  
4、Connector——>CoyoteAdapter——>protocolHandler
连接器,协议处理器,处理器适配器。tomcat5的时候连接器到协议处理器还没有使用适配器模式,而是根据不同的协议初始化不同的协议处理器来处理不同协议的请求。这样显然不利于组件的扩展,当我需要增加一个协议支持的时候,还需要去修改Service加载Connector部分的代码。使用适配器模式,就不需要这样做了,对于新扩展的连接器只需要把协议类定义在server.xml的connector中即可。
  
5、tomcat.comet.support
以前在做实时通讯的时候,采用的是xmpp协议,客户端和服务端使用心跳保持连接,保证交互的实时性。而对于web应用而言xmapp协议显然不合适,之前有了解过除了保持长连接(服务器扛不住)还有一些轻量型的框架可以实现服务端向web端的推送,其实我们的Tomcat也有对Comet的支持,这也是最近几天阅读tomcat源码才了解的。详细了解移步:https://www.ibm.com/developerworks/cn/web/wa-cometjava/。
  
6、LifecycleListener
整个证明周期所有事件的触发,都依赖于LifecycleListener,伴随着组件或者容器的init、start、addChild、destroy等操作,这个过程中会根据适当的场景执行相应的addLifecycleListener操作,所有的容器都会有一个XxxConfig类实现LifecycleListener接口来充当LifecycleListener的角色。在init、start等过程中也会调用fireLifecycleEvent,进而促发组件里所有Listener对应类型(过程:INITIALIZED、STARTING_PREP、STARTING)的事件。通过这样巧妙设计,既保证了所有组件生命周期的统一,又把容器的生命周期活动(事件)的具体实现分离了出来。
  
7、Digester
Digester对于xml的解析没有什么值得一说的,但他有一个优于Xerces,dom4j等特性,他可以很方便的根据xml生成java对象,还可以根据匹配模式(matching pattern)识别,再由规则(rule)执行定义的操作,这一点异常强大,在构建组件化的应用时非常有用,Tomcat中就是用Digester解析Web.xml来配置Context以及下面filter、servlet、listener等等。
  8、DeltaManager
  Tomcat本身提供了集群的方法,只需要在Server.xml或者Context.xml中配置DeltaManager的SessionManager即可,这里我想说的是它的具体实现,利用IP组播的方式向其他节点发送Session数据,从而达到Session复制的功能。(扩展阅读:IP组播与组播协议)
  9、StandardManager,PersistentManager
  对于Session的管理tomcat提供了两种manager,StandardManager配置比较少,主要差别在于持久化的配置,StandardManager在tomcat启动的时候会执行load方法加载SESSIONS.ser中的session数据,在tomcat关闭的时候会支持unload,把session写到SESSIONS.ser中(原来我一直以为持久化是在createSession的时候做的)。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-329656-1-1.html 上篇帖子: tomcat 工作原理 下篇帖子: tomcat index.jsp
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表