tomcat的启动过程

发布时间:2017-1-21 2:02:38 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"tomcat的启动过程",主要涉及到tomcat的启动过程方面的内容,对于tomcat的启动过程感兴趣的同学可以参考一下。

一、我们知道,tomcat可以由org.apache.catalina.startup.Bootstrap这个类启动,这个类型做了两件事情: 1、指定classloader 2、引导Catalina启动,使用reflection反射技术,调用org.apache.catalina.startup.Catalina的process()方法, 并传递参数过去。public void process(String args[])     Catalina.java的process()做几件事:     a: 使用Digester技术装配tomcat各个容器与组件(server.xml文件加载);     b: 为top level的server做初始化工作     c: 从Server这个容器开始启动,————转下一步(二)     d: 为Server做一个hook程序,当Server 关闭时,关闭整个Tomact容器     e: 监听8005端口,如果发shutdown,关闭8005端口的socket 二、启动容器 Server(代表整个容器):触发Server容器中的启动前、启动中、启动后事件,并运行事件处理器。     Server---->启动Server的子容器Service(指定提供服务的组件,server.xml中可以配置一个或多个) <!-- A "Service" is a collection of one or more "Connectors" that share a single "Container" Note: A "Service" is not itself a "Container", so you may not define subcomponents such as "Valves" at this level. Documentation at /docs/config/service.html -->    Service----> 启动子容器Engine,启动Connector(每个Service只有一个Engine,可以有多个Connector) Engine中指定了处理所有Connector接受到的客户请求的Host主机名。 Connector定义了服务的端口号,负责接受客户的请求和向客户返回相应结果。     Engine----> Host(一个或多个,每个Host表示一个虚拟主机,可以包含一个或多个web应用)     Host ---->Context(每个Context代表运行在Host上的单个Web应用.)     StandardContext.start() 这个启动Context容器的方法被StandardHost调用:     1、指定Loader,用默认的org.apache.catalina.loader.WebappLoader,Loader就是用来指定这个context会用到哪些类, 哪些jar包。     2、指定 Manager. 通常使用默认的org.apache.catalina.session. StandardManager 。 Manager是用来管理session的。得到请求后,Request中有一个session属性。     3、Binding thread。到了这里, 就应该发生 class Loader 互换了。 之前是看得见tomcat下面所有的class和lib. 接下来需要看得见当前context下的class。 所以要设置contextClassLoader, 同时还要把旧的ClassLoader记录下来,因为以后还要用的。     4、启动 Loader. 指定这个Context具体要使用哪些classes, 用到哪些jar文件。 如果reloadable设置成了true, 就会启动一个线程来监视classes的变化, 如果有变化就重新启动Context。     5、启动logger     6、触发Context上的监听器,作为监听器之一,ContextConfig会被启动. ContextConfig就是用来配置web.xml的。 比如这个Context有多少Servlet, 又有多少Filter, 就是在这里给Context装上去的。         6.1、 defaultConfig. 每个context都得配置 tomcat/conf/web.xml 这个文件。             6.2、 applicationConfig 配置自己的 WEB-INF/web.xml 文件         6.3、 validateSecurityRoles 权限验证。 通常我们在访问/admin 或者/manager的时候,需要用户要么是admin的要么是manager的, 才能访问。 而且我们还可以限制那些资源可以访问, 而哪些不能。 都是在这里实现的。         6.4、 tldScan: 扫描一下, 需要用到哪些标签(tag lab)     7、启动manager     8、postWelcomeFiles() 我们通常会用到的3个启动文件的名称:         index.html、index.htm、index.jsp 就被默认地绑在了这个context上     9、 listenerStart 配置listener,初始化Listener     10、 filterStart 配置 filter,初始化Filter     11、 启动带有<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         处理没有做Servlet Mapping的那些Servlet.         org.apache.jasper.servlet.JspServlet         处理JSP文件的.     12、  标识context已经启动完毕。 关键代码以后会补上。。

上一篇:黑马程序员---抽象类例子
下一篇:httpclient通过POST来上传文件,而不是通过流的形式,并在服务端进行解析(通过httpmime.jar来操作)

相关文章

相关评论