Tomcat源码

1.Connector   Container:Engine,Host,Context,Wrapper(责任链的设计模式)   Valve:
Tomcat 中一个最容易发现的设计模式就是责任链模式,这个设计模式也是 Tomcat 中 Container设计的基础,整个容器的就是通过一个链连接在一起,这个链一直将请求正确的传递给最终处理请求的那个 Servlet。

责任链模式,就是很多对象由每个对象对其下家的引用而连接起来形成一条链,请求在这条链上传递,直到链上的某个对象处理此请求,或者每个对象都可以处理请求,并传给下一家,直到最终链上每个对象都处理完。这样可以不影响客户端而能够在链上增加任意的处理节点。

通常责任链模式包含下面几个角色:

  • Handler(抽象处理者):定义一个处理请求的接口
  • ConcreteHandler(具体处理者):处理请求的具体类,或者传给下家
  • Pipeline 就是连接每个子容器的管子,里面传递的 Request 和 Response 对象好比管子里流的水,而 Valve 就是这个管子上开的一个个小口子,让你有机会能够接触到里面的水,做一些额外的事情。

    为了防止水被引出来而不能流到下一个容器中,每一段管子最后总有一个节点保证它一定能流到下一个子容器,所以每个容器都有一个 StandardXXXValve。

     
  •  
 
 
 
2.Tomcat是如何启动的:

这里写图片描述

      Tomcat主要有两个核心的组件,Connector(连接器)和容器(Container)。所谓连接器就是当有HTTP请求到来时,连接器负责接收这个请求,然后将该请求转发到容器。容器有Engine,Host,Context,Wrapper。Engine:表示整个Catalina servlet引擎;Host:表示包含一个或多个Context容器的虚拟主机;Context:表示一个Web应用程序。一个Context可以有多个Wrapper;Wrapper:表示一个独立的servlet。

一般启动Tomcat是运行startup.sh文件。org.apache.catalina.startup包下面Bootstrap类的main方法。

1)initClassLoader:初始化类加载器

2)通过反射调用加载Catalina,并调用load()方法(创建Digester,加载web.xml文件,实例化所有的服务组件包括server,service和connect。)

3)执行catalina实例的start方法,启动所有组建(观察者模式)

 

 

3.Tomcat的类加载机制:
Tomcat基本遵守了JVM的委派模型,但是也做了细微的调整,以适应Tomcat自身的要求。
在Tomcat 6中默认情况下,不是完全按照先Tomcat的lib再Web应用的lib这种顺序去加载类。
Jar包的加载顺序是:
1)JRE中的Java基础包
2)Web应用WEB-INF\lib下的包
3)Tomcat\lib下的包
如果想要在Web应用间共享一些Jar包,则不仅需要将公共包放在Tomcat的lib下,还要删掉Web应用lib中的包,
否则Tomcat启动时还是会优先加载Web应用lib下的包的。
 
4.Tomcat中的Session是如何存储的
ConcurrentHashMap
posted @ 2017-06-13 00:04  bili111  阅读(195)  评论(0编辑  收藏  举报