面包屑之tomcat
作为一个小小的java程序员,平日里接触最多的莫过于网页了。至于网页是如何神奇的动态传输到浏览器,对此我一直是一知半解。
是的,工具实现了一切,还有学术界的"不要重复造轮子",像一道无形的高墙让人难以逾越。
本人极度缺乏安全感,对陌生的事物,以及对未来的迷茫,让我迫切想抓住一切真相。
我不敢承认自己没有方向,可我又害怕停下的步伐,我就像一头被栓住的磨驴,看不到远方,只能朝着未知的终点前进。
想矫情下,却没有足够的才华。哎,还是说说最近看得一本书的心得吧。
《how tomcat works》,书如其名,一本讲tomcat是如何工作的书。看完之后,不说达到了解惑的效果,至少收获了不少的知识。
以前前辈总对我说,tomcat就是一个容器,再详细点就是一个装servlet的容器。恩,听起来挺简单的,也蛮容易理解的。可,它是个用来干什么的容器呢?
这本书里面就有答案:tomcat其实就是个实现了servlet规范的一个容器。(个人理解)
tomcat基本结构:
大致流程:
Connector创建ServerSocket监听http请求
Processor解析Http请求,创建HttpServletRequest,HttpServletResponse对象
Container传递HttpServletRequest,HttpServletResponse对象到对应servlet。
阅读感悟:
解析http请求,实现servlet规范,
各组件生命周期管理,事件支持(通过实现Lifecycle接口,接口有start,stop方法)
后台周期线程,
容器自带pipeline处理请求,方便请求
工具类实现功能组件,提供技术支持,降低开发成本,(LifecycleSupport类)
门面对象隐藏保护内部实现,
xml配置对象,动态组建tomcat,(Digester)
容器呈树状结构,适合分发请求,
catalina启动,解析xml组建顶层容器对象,直到host,host本身也是个deployer,根据多种方式配置Context,
启动server,根据他们的层级关系,依次调用生命周期方法启动。
catalina关闭,实现,主线程阻塞等待关闭命令,
注册jvm关闭钩子,预防不正常关闭时,资源未回收,
自定义classloader,
目的:缓存,安全管理,
logger, manager