zoukankan      html  css  js  c++  java
  • 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-INFlib下的包
    3)Tomcatlib下的包
    如果想要在Web应用间共享一些Jar包,则不仅需要将公共包放在Tomcat的lib下,还要删掉Web应用lib中的包,
    否则Tomcat启动时还是会优先加载Web应用lib下的包的。
     
    4.Tomcat中的Session是如何存储的
    ConcurrentHashMap
  • 相关阅读:
    【Java】《Java程序设计基础教程》第三章学习
    【Python】编程小白的第一本python(最基本的魔法函数)
    【Python】编程小白的第一本python(基础中的基础)
    bootstrap中的col-xs-*,col-sm-*,col-md-* 关系
    java基础面试题总结
    人生中第一次面试(阿里一面)
    阿里云服务器ip:端口号无法访问
    redis基本指令
    linux基本指令
    centos安装redis
  • 原文地址:https://www.cnblogs.com/james111/p/6995804.html
Copyright © 2011-2022 走看看