Tomcat原理








前几日弄nodejs+html5+mongoDB+websocket弄的头晕晕的,毕竟全是新东西,信息量太大。偶然看到一篇关于tomcat原理的文章,突然有了研究其原理的冲动。于是乎就下了一份代码、和一份文档开始琢磨每天都用到的这个东西.只研究了一部分的源码。看着看着有点头晕,就翻看了很多关于这方面的博文,大神们都很给力,看完他们的文章加上自己的理解,整理了一份东西,同时也提出了自己的疑问,希望大家一起学习进步。

  

context 详细启动过程

Context  到了这里, 就终于轮到了tomcat启动中真正的重头戏,启动Context了。  StandardContext.start() 这个启动Context容器的方法被StandardHost调用.

5.1 webappResources 该context所指向的具体目录

5.2 安 装defaultContex, DefaultContext 就是默认Context。 如果我们在一个Host下面安装了DefaultContext,而且defaultContext里面又安装了一个数据库连接池资源的话。 那么其他所有的在该Host下的 Context, 都可以直接使用这个数据库连接池, 而不用格外做配置了。

           5.3 指定Loader. 通常用默认的org.apache.catalina.loader.WebappLoader这个类。   Loader就是用来指定这个context会用到哪些类啊, 哪些jar包啊这些什么的。 

5.4 指定 Manager.通常使用默认的org.apache.catalina.session. StandardManager 。 Manager是用来管理session的。 其 实session的管理也很好实现。 以一种简单的session管理为例。 当需求传递过来的时候,在Request对象里面有一个sessionId 属性。 OK, 得到这个sessionId后, 我们就可以把它作为map的key,而value我们可以放置一个 HashMap. HashMap里边儿, 再放我们想放的东西。

5.5postWorkDirectory (). Tomcat下面有一 个work目录。 我们把临时文件都扔在那儿去。 这个步骤就是在那里创建一个目录。 一般说来会在�TALINA_HOME%/work /Standalone/localhost/ 这个地方生成一个目录。

5.6 Binding thread。到了这里, 就应该发 生 class Loader 互换了。 之前是看得见tomcat下面所有的class和lib. 接下来需要看得见当前context下的 class。 所以要设置contextClassLoader, 同时还要把旧的ClassLoader记录下来,因为以后还要用的。 

5.7 启动Loader. 指定这个Context具体要使用哪些classes, 用到哪些jar文件。 如果reloadable设置成了true, 就会启动一个线程来监视classes的变化, 如果有变化就重新启动Context。 

5.8 启动logger

5.9 触发安装在它身上的一个监听器。 <br>lifecycle.fireLifecycleEvent(START_EVENT,null);  

作为监听器之一,ContextConfig会被启动.ContextConfig就是用来配置web.xml的。 比如这个Context有多少Servlet, 又有多少Filter, 就是在这里给Context装上去的。

5.9.1 defaultConfig. 每个context都得配置tomcat/conf/web.xml 这个文件。 

5.9.2 applicationConfig 配置自己的WEB-INF/web.xml 文件 

5.9.3 validateSecurityRoles 权 限验证。 通常我们在访问/admin或者/manager的时候,需要用户要么是admin的要么是manager的, 才能访问。 而且我们还可以 限制那些资源可以访问,而哪些不能。 都是在这里实现的。 <br>5.9.4 tldScan: 扫描一下, 需要用到哪些标签(taglab) 

5.10 启动 manager 

5.11postWelcomeFiles() 我们通常会用到的3个启动文件的名称: <br>index.html、index.htm、index.jsp 就被默认地绑在了这个context上

5.12listenerStart 配置listener

5.13filterStart 配置 filter

5.14 启动带有<load-on-startup>1</load-on-startup>的Servlet. 

顺序是从小到大:1,2,3… 最后是0 

默认情况下, 至少会启动如下3个的Servlet:

 org.apache.catalina.servlets.DefaultServlet 

处理静态资源的Servlet.什么图片啊, html啊, css啊, js啊都找他

org.apache.catalina.servlets.InvokerServlet 

处理没有做ServletMapping的那些Servlet. 

 org.apache.jasper.servlet.JspServle

处理JSP文件的

5.15 标识context已经启动完毕。 走了多少个步骤啊,Context总算是启动完毕喽。  OK! 走到了这里, 每个容器以及组件都启动完毕。 Tomcat终于不辞辛劳地为人民服务了!







总结: 总的来说、通过差不多一个星期时间的学习收获还是很多的,有时发现为什么设计架构的人那么NB ,完全想不到那样做,再想想自己平常写项目,都是一堆堆的代码堆出来的。完全没有什么设计思想以及架构。也许这就是设计师与码农的根本区别吧。多看看这样的源码应该还是会有些潜移默化的作用,看多了自然就会了。看毕其实发现java最精髓的原来是thred和socket。难怪当时学起来一团混沌的感觉,让人摸不着头脑。总之以后要多看大神是如何设计程序的。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值