• 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
  • 相关阅读:
    Visual Studio 存在版本之间冲突
    Failed to load resoure:the serve responded with a status of 405 (Method Not Allowed)
    Excel 导入解析数据 NPOIExcelHelper
    WIN10 SERVICES -- 部署IIS
    高德地图API-搜索提示并定位到位置,卫星地图和标准地图的切换
    BIMFCE选择全量绘制
    JS中如何获取当前日期,并与输入日期作比较
    html中input标签放入小图标
    div跟随浏览器大小而改变
    vue-amap接入高德地图示例
  • 原文地址:https://www.cnblogs.com/james111/p/6995804.html
Copyright © 2020-2023  润新知