应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

Tomcat源码篇简单到超乎想象的启动流程

  image。pngTomcat的启动核心流程
  前面给大家介绍了Tomcat中的生命周期的设计,掌握了这块对于我们分析Tomcat的核心流程是非常有帮助的,也就是我们需要创建相关的核心组件,比如Server,Service肯定都绕不开生命周期的方法。
  image。png1。启动的入口
  你可以通过脚本来启动Tomcat服务(startup。bat),但如果你看过脚本的命令,你会发现最终调用的还是Bootstrap中的main方法,所以我们需要从main方法来开始
  image。png
  然后我们去看main方法中的代码,我们需要重点关注的方法有三个bootstrap。init()方法load()方法start()方法
  也就是在这三个方法中会完成Tomcat的核心操作。2。init方法
  我们来看下init方法中的代码,非核心的我们直接去掉publicvoidinit()throwsException{创建相关的类加载器initClassLoaders();省略部分代码。。。通过反射创建了Catalina类对象Classlt;?startupClasscatalinaLoader。loadClass(org。apache。catalina。startup。Catalina);创建了Catalina实例ObjectstartupInstancestartupClass。getConstructor()。newInstance();省略部分代码。。。StringmethodNamesetParentClassLoader;Classlt;?paramTypes〔〕newClass〔1〕;paramTypes〔0〕Class。forName(java。lang。ClassLoader);ObjectparamValues〔〕newObject〔1〕;paramValues〔0〕sharedLoader;把sharedLoader设置为了commonLoader的父加载器MethodmethodstartupInstance。getClass()。getMethod(methodName,paramTypes);method。invoke(startupInstance,paramValues);Catalina实例赋值给了catalinaDaemoncatalinaDaemonstartupInstance;}首先是调用了initClassLoaders()方法,这个方法会完成对应的ClassLoader的创建,这个比较重要,后面专门写一篇文章来介绍。通过反射的方式创建了Catalina的类对象,并通过反射创建了Catalina的实例设置了类加载器的父子关系用过成员变量catalinaDaemon记录了我们创建的Catalina实例
  这个是通过bootstrap。init()方法我们可以获取到的有用的信息。然后我们继续往下面看。3。load方法
  然后我们来看下load方法做了什么事情,代码如下:privatevoidload(String〔〕arguments)throwsException{Calltheload()methodStringmethodNameload;load方法的名称Objectparam〔〕;Classlt;?paramTypes〔〕;if(argumentsnullarguments。length0){paramTypesnull;paramnull;}else{paramTypesnewClass〔1〕;paramTypes〔0〕arguments。getClass();paramnewObject〔1〕;param〔0〕arguments;}catalinaDaemon就是在init中创建的Catalina对象MethodmethodcatalinaDaemon。getClass()。getMethod(methodName,paramTypes);if(log。isDebugEnabled()){log。debug(Callingstartupclassmethod);}会执行Catalina的load方法method。invoke(catalinaDaemon,param);}
  上面的代码非常简单,通过注释我们也可以看出该方法的作用是调用Catalina的load方法。所以我们还需要加入到Catalina的load方法中来查看,代码同样比较长,只留下关键代码publicvoidload(){if(loaded){return;只能被加载一次}loadedtrue;initDirs();废弃的方法BeforedigesteritmaybeneededinitNaming();和JNDI相关的内容忽略CreateandexecuteourDigester创建并且执行我们的Digester对象Server。xmlDigesterdigestercreateStartDigester();省略掉了Digester文件处理的代码getServer()。setCatalina(this);Server对象绑定Catalina对象getServer()。setCatalinaHome(Bootstrap。getCatalinaHomeFile());getServer()。setCatalinaBase(Bootstrap。getCatalinaBaseFile());StreamredirectioninitStreams();省略掉了部分代码。。。getServer()。init();完成ServerServiceEngineConnector等组件的init操作}
  把上面的代码简化后我们发现这个Load方法其实也是蛮简单的,就做了两件事。通过Apache下的Digester组件完成了Server。xml文件的解析通过getServer()。init()方法完成了Server,Service,Engin,Connector等核心组件的初始化操作,这块和前面的LifecycleBase呼应起来了。
  image。png
  如果生命周期的内容不清楚,请看上一篇文章的介绍。4。start方法
  最后我们来看下start方法的代码。publicvoidstart()throwsException{if(catalinaDaemonnull){init();如果catalinaDaemon为空初始化操作}获取的是Catalina中的start方法MethodmethodcatalinaDaemon。getClass()。getMethod(start,(Class〔〕)null);执行Catalina的start方法method。invoke(catalinaDaemon,(Object〔〕)null);}
  上面的代码逻辑也很清楚,就是通过反射的方式调用了Catalina对象的start方法。所以进入Catalina的start方法中查看。publicvoidstart(){if(getServer()null){load();如果Server为空重新init相关的组件}if(getServer()null){log。fatal(Cannotstartserver。Serverinstanceisnotconfigured。);return;}Startthenewserver关键方法启动Servertry{getServer()。start();}catch(LifecycleExceptione){省略。。。}省略。。。Registershutdownhook注册关闭的钩子if(useShutdownHook){省略。。。}if(await){await();stop();}}
  通过上面的代码我们可以发现核心的代码还是getServer。start()方法,也就是通过Server对象来嵌套的调用相关注解的start方法。
  image。png5。核心流程的总结
  我们可以通过下图来总结下Tomcat启动的核心流程
  image。png
  从图中我们可以看到Bootstrap其实没有做什么核心的事情,主要还是Catalina来完成的。
  本文只是从Tomcat的启动核心流程来讲解,还有些具体的实现细节没有介绍到,会在后续的文章中给大家细细到来,欢迎关注收藏哦!

沙发管家双十一智能电视如何挑选?买前必看双十一马上就要到了,这对于想要购买智能电视的小伙伴来说无疑是个好时机。但是对于市场上错综复杂的产品,不注意就会踩雷。今天就和大家说说买智能电视需要注意些什么吧!电视类型……从零开始魔兽世界(第六天)第六天,早早地起来,跑回十字路口告诉了曼科里克这个不幸的消息。他虽然很难过,但还是向我表示了感谢,并希望我们替他的妻子复仇。把任务都交完后我们就20级了,按照评论里老哥说……到了中年以后臀型不好看?建议还是穿过膝半裙,遮肉显优雅没有人的身材是十全十美的,有的女生可能个子很高挑,但是臀型并不好看,如果穿太修身的时装,会暴露臀型偏宽的缺陷。尤其到了中年以后,很多妈妈们生完小孩变成妈妈臀,又没有时间锻……韩旭6投1中贡献3分3篮板纽约自由人不敌华盛顿神秘人遭遇5连北京时间7月22日凌晨,2022赛季WNBA常规赛,纽约自由人6978不敌华盛顿神秘人,遭遇到5连败。此役,韩旭出场11分11秒6投1中贡献3分3篮板。此役赛前,纽约自由……为母亲缝制新衣写给祖国诞辰七十三周年原创小诗文范磊母亲!脱下吧!脱下这身疲惫!母亲!脱下吧!脱下这身艰辛!您五千岁了!您并不老迈您……提眉,刚从手术室出来以下是求美者的自述:谁能想到我年纪不大眼皮耷拉得如此明显,我觉得如果再放任两年不管就要影响我的视线了。。。。。。我们老家50、60岁的人还没我的眼睛严重,是不是很扎心?不……小米首款2亿像素旗舰!小米12TPro跑分出炉骁龙8实锤据此前消息,小米将在本月发布旗下首款2亿像素主摄手机小米12TPro。今天,有爆料者在Geekbench数据库中发现了疑似该机的信息,其中显示其将搭载骁龙8处理器。……生于70年代八十年代的三次远游回想八十年代,我大概一共出过三次远门,去到北京和山海关。最早的一次出门是母亲带我去北京玩儿,记忆久远,已经有些模糊了。印象中我即将上小学,母亲说,上学后时间就会被限制,要……三孩家庭注意了,国内MPV市场有了新变化每经记者:董天意每经实习记者:王岩每经编辑:孙磊9月,国内MPV市场月度销冠车型易主。乘联会数据显示,9月,我国MPV市场呈回升态势,销量约8。9万辆,同比增长6。……它是电影命中注定拍摄地,世上最美乡村,去过就再也忘不掉我喜欢读文化,更热衷看风景。第一次在电影《命中注定》中邂逅意大利的田野风光时,就深深地迷恋。高低起伏的山丘,麦浪滚滚的田野,笔直挺拔的松柏,还有蓝天白云这一次,和好……巴特勒361044无缘今日最佳球员?因为字母哥超神一战比肩邓今天NBA一共有4场季后赛,众多球星都打出了好的表现,约基奇、库里、克莱、英格拉姆、大瓦兰、巴特勒、阿伦等球星的数据也都非常出色,但如果要评选今日最佳球员的话,却是毫无悬念的。……分床睡有利于培养孩子的独立性前篇内容提到孩子与父母睡,父母的某些行为如打鼾、翻身或身上异味等会影响孩子的睡眠质量,而孩子睡眠质量不佳导致的结果是很严重的,见《孩子睡着后,还会用脚锤人?》那么,孩子是……
签2将,勇士节省6060万!库里领衔14人大名单,球队苦等一勇士在2122赛季成功夺得总冠军,到了休赛期,他们的球员和教练团队成为其他球队哄抢的对象,防守助教迈克布朗和员发展教练巴博萨被国王挖走,进攻助教阿特金森险些被黄蜂挖走,球员上,……腾讯前员工追讨1300万元加班费工资差额等,法院判了7月22日收到二审判决书,腾讯必须向我支付年终奖差额90765元。红星新闻近日从腾讯前员工、因每天工作不足8小时被辞当事人闫先生处获悉,他与腾讯公司劳动合同纠纷案件已由广……帆布鞋太幼稚?别傻了!只要懂搭配,穿搭小白也能变成时髦精给人朴实无华感觉的帆布鞋,一看就充满了学生气,很多人也把帆布鞋定义为学生一族的鞋子,在步入社会之后就慢慢抛弃它了。看到大街上有人踩着帆布鞋时,又勾起了自己对帆布鞋的怀念和喜爱,……腐乳是人间美味还是致癌凶手,是时候一次性说清楚了今天的主角是腐乳腐乳是我国独创的调味品,有红腐乳、白腐乳、酱腐乳等多个品种它既可作为佐粥的小菜单独食用也可作为调味品烹调出风味独特的菜肴那股……逍遥丸柴胡舒肝丸越鞠丸如何通过舌像选?春季养肝秘诀在这里春季养生先养肝,那今天和医生教你如何正确地选择中成药养肝,中医上讲肝藏血,主疏泄升发。血液运行,脾土的运化,情志的调畅,肾精的通畅,皆依肝之疏泄;人体一身阳气的升腾,也赖肝之升……花钱如流水,有钱也养不起,这8位女星壕到颠覆你的认知女明星有多富有?她们的高消费简直能够颠覆你的想象。明星们的高收入已经成为一个公开的秘密,一千万甚至数十亿的电影收入令人惊叹。相比于天价片酬,明星们花钱如流水的行为更令人难……章子怡亲嫂子殷旭出席活动,礼服外包半截束腰看不懂,撞脸田朴珺有很多人都认为穿搭是一件比较难的事情,需要通过长时间的观察和培养才能够达到一定的高水准,呈现出个人的气场和在穿搭方面的精致。其实日常生活当中是不用过分去追求时尚感或者是个性的,……披哥2初舞台歌单及打call阵容一公选歌分组及结果,都在这里《披荆斩棘的哥哥》第二季这速度真够光速的,网上才流出参加哥哥的名单,紧跟着舞台单人solo歌单、打call阵容、一公选曲分组及结果路透,统统在曝了光,披荆斩棘第二季一公分组半个……精准抄底腾讯的中国巴菲特,到底有多厉害?3月16日,腾讯控股大涨23,而号称中国巴菲特的段永平,在3月15日就精准抄底了腾讯,估计过了一天就大赚超过百万美元。3月14午间,段永平接连更新两条动态,称这个礼拜五有……巴媒若热苏斯转会,老东家帕尔梅拉斯预计可入账约337万镑直播吧6月26日讯据巴西《环球体育》报道,如果热苏斯转会加盟阿森纳的话,他的老东家帕尔梅拉斯可入账约2170万雷亚尔(约337万镑)。据多家媒体报道,阿森纳为热苏斯开出的……明明有张完美容颜,却被身材拖累的6位演员,有人是自寻烦恼影视圈不乏靓女帅哥,演员们的外貌身材,也是网友喜欢讨论的话题。但有些演员,明明天生丽质,有着一张完美容颜,却偏偏被自己的身材拖累。有些人是因为天生如此,无法改变,只……本草纲目十卷金石部之四论述(玄石)明代医学大师李时珍《本草纲目》一书中对(玄石)陨石有详细的记载。时珍曰:《雷书》云,雷斧如斧,铜铁为之;雷似乃石也,紫黑色,雷锤重数斤,雷钻长尺余,皆如钢铁,雷神以劈物击……
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网