总体架构解析

  • Server: 一个StandardServer类实例就表示一个Server容器,TOMCAT启动的时候首先会启动一个Server,一个Server包括多个Service
  • Service:一个StandardService类实例就表示一个Service容器,它由一个或者多个Connector(连接器),以及一个Engine 组成

  • Connector:用于接收请求并将请求封装成Request和Response来具体处理

        TOMCAT有两个典型的Connector,一个直接侦听来自browser的http请求,一个侦听来自其它 WebServer的请求

         Connector  Coyote Http/1.1  在端口8080处侦听来自客户browser的http请求

         Connector  Coyote JK2 在端口8009处侦听来自其它WebServer(Apache)的servlet/jsp代理请求。

  • Engine:一个StandardEngine类实例就表示一个Engine容器,负责处理所有Connector所获得的客户请求,Engine下可以配置多个虚拟主机Virtual Host,每个虚拟主机都有一个域名,当Engine获得一个请求时,它把该请求匹配

         到某个Host上,然后把该请求交给该Host来处理;

         Engine有一个默认虚拟主机,当请求无法匹配到任何一个Host上的时候,将交给该默认Host来处理

  • Host:一个StandardHost类实例就表示一个Host容器,代表一个Virtual Host(虚拟主机),每个虚拟主机和某个网络域名Domain Name相匹配,每个虚拟主机下都可以部署(deploy)一个或者多个Web App,每个Web App对应于一个Context,有一个Context path,当Host获得一个请求时,将把该请求匹配到某个Context上,然后把该请求交给该Context来处理,匹配的方法是“最长匹配”
  • Context:一个StandardContext类实例就表示一个Context容器,一个Context对应于一个Web Application,一个WebApplication由一个或者多个Servlet组成,Context在创建的时候将根据配置文件$CATALINA_HOME/conf/web.xml和$WEBAPP_HOME/WEB-INF/web.xml载入Servlet类,当Context获得请求时,将在自己的映射表(mapping table)中寻找相匹配的Servlet类。如果找到,则执行该类,获得请求的回应,并返回。
  • Wrapper:一个StandardWrapper类实例就表示一个Wrapper容器,Wrapper容器负责管理一个Servlet,包括Servlet的装载、初始化、资源回收。Wrapper是最底层的容器,其不能在添加子容器

处理流程

  访问请求地址为http://localhost:8080/examples/composite.jsp的处理过程:

  1、在端口8080启动Server,并通知Service完成启动,Service通知Connector完成初始化和启动的过程

  2、Connector首先收到这个请求,会调用ProtocolHandler完成http协议的解析,然后交给SocketProcessor处理,解析请求头,再交给CoyoteAdapter解析请求行和请求体,并把解析信息封装到Request和Response对象中

  3、把请求(此时应该是Request对象,这里的Request对象已经封装了Http请求的信息)交给Container容器

  4、Container容器交给其子容器——Engine容器,并等待Engine容器的处理结果

  5、Engine容器匹配其所有的虚拟主机,这里匹配到Host

  6、请求被移交给hostname为localhost的Host容器,host匹配其所有子容器Context,这里找到contextPath为/examples的Context容器。如果匹配不到就把该请求交给路径名为”“的Context去处理

  7、请求再次被移交给Context容器,Context继续匹配其子容器Wrapper,由Wrapper容器加载composite.jsp对应的servlet,这里编译的servlet是basic_002dcomparisons_jsp.class文件

  8、Context容器根据后缀匹配原则*.jsp找到composite.jsp编译的java类的class文件

  9、Connector构建一个org.apache.catalina.connector.Request以及org.apache.catalina.connector.Response对象,使用反射调用Servelt的service方法

  10、Context容器把封装了响应消息的Response对象返回给Host容器

  11、Host容器把Response返回给Engine容器

  12、Engine容器返回给Connector

  13、Connetor容器把Response返回给浏览器

  14、浏览器解析Response报文,显示资源内容

 tomcat配置文件server.xml解析

 <Server port="8005" shutdown="SHUTDOWN"> 
    <Service name="Catalina"> 
        <Executor ...... /> 
        <Connector ...... /> 
        <Connector ...... /> 
        <Engine name="Catalina" ... > 
            <Host name="localhost" ... > 
                <Context ... /> 
            </Host> 
        </Engine> 
    </Service> 
</Server>

1、 Connector节点常用属性

  • enableLookups:(default=true) 是否允许反向解析访客的IP地址,当你的应用程序使用 request.getRemoteHost() 时如果只需要IP地址,建议禁用此项,这样能节省反向域名解析的时间。
  • maxPostSize:(default=2097152 即2MB) 最大允许 POST 上传的数据大小(单位为:字节),对于一般网站来说,比如有写评论写文章的网站,默认的2MB已经足够,不过如果网站带有图片甚至文件上传功能,则需要根据具体情况来定。
  • protocol:连接器的类型,tomcat 6 有如下几种选择
    • org.apache.coyote.http11.Http11Protocol:简写为 “HTTP/1.1″,这是默认的连接器,一个访客网络连接需要一个线程,并发性能比较低。
    • org.apache.coyote.http11.Http11NioProtocol:NIO连接器,一个由非阻塞的socket工作模式构成的连接器,并发性能良好,纯Java实现。
    • org.apache.coyote.http11.Http11AprProtocol:APR连接器,所谓 APR 就是网络上最多服务器使用的 Web 服务程序 Apache Http Server 所使用的库,Tomcat 建议在生产环境使用,具体方法下面会介绍。
  • redirectPort:当用户访问非https的资源而该资源又需要https方式访问时,tomcat会自动重定向到https端口,一般https使用 TCP 443端口,所以一般取值”443″。
  • SSLEnabled:(default=false),设置当前连接器是否使用安全SSL传输,如果设置为”true”,则应该同时设置下面两个属性: scheme=”https” (default=http) 可以设置为 http 或者 https。 secure=”true” (default=false)。
  • address:连接器所绑定的IP地址,当一台服务器存在多个ip地址时可以指定其中的需要绑定的一个,默认不设置该属性的值表示绑定当前服务器的所有ip地址。
  • compressableMimeType:(default=”text/html,text/xml,text/plain”) 指定需要GZIP压缩的资源的类型。
  • compression:(default=off) 是否启用GZIP压缩,可以取值 on/off/force,设置为on之后会对 compressableMimeType 属性指定的资源类型启用GZIP压缩。
  • connectionTimeout:(default=”60000″) 当访客网络连接后,服务器等待第一行Request头出现的时间。单位是毫秒。
  • executor:指定当前连接器使用的线程池的名称,如果指定,则忽略其他针对线程数量的设置,比如 maxThreads。
  • maxThreads:(default=200) 最多可创建线程的数量。
  • port=”80″:绑定端口。
  • keepAliveTimeout:(default=connectionTimeout),访客完成一次请求后维持网络连接的时间。

2、Executor (定义共享的线程池)节点常用属性

  • name:共享线程池的名字。这是Connector为了共享线程池要引用的名字。该名字必须唯一、默认值:None
  • className:指定实现org.apache.catalina. Executor接口的类,默认值为org.apache.catalina.core. StandardThreadExecutor
  • daemon:是否为守护线程,默认值为true
  • maxIdleTime:总线程数高于minSpareThreads时,空闲线程的存活时间(单位:ms),默认值为60000,即1min
  • maxQueueSize:任务队列上限,默认值为Integer.MAX_VALUE(2147483647),超过此值,将拒绝
  • maxThreads:线程池内线程数上限,默认值为200
  • minSpareThreads:线程池内线程数下限,默认值为25
  • namePrefix:线程名字的前缀。线程名字通常为namePrefix+ threadNumber
  • prestartminSpareThreads:是否在Executor启动时,就生成minSpareThreads个线程。默认为false
  • threadPriority:Executor内线程的优先级,默认值为5(Thread.NORM_PRIORITY)
  • threadRenewalDelay-重建线程的时间间隔。重建线程池内的线程时,为了避免线程同时重建,每隔threadRenewalDelay(单位:ms)重建一个线程。默认值为1000,设置为负则不重建

3、Engine 节点常用属性

  • name:Engine的名字
  • defaultHost:指定默认Host。Engine接收来自Connector的请求,然后将请求传递给defaultHost,defaultHost 负责处理请求
  • className:指定实现org.apache.catalina. Engine接口的类,默认值为org.apache.catalina.core. StandardEngine
  • backgroundProcessorDelay:Engine及其部分子组件(Host、Context)调用backgroundProcessor方法的时间间隔。backgroundProcessorDelay为负,将不调用backgroundProcessor;backgroundProcessorDelay的默认值为10
    注:Tomcat启动后,Engine、Host、Context会启动一个后台线程,定期调用backgroundProcessor方法。backgroundProcessor方法主要用于重新加载Web应用程序的类文件和资源、扫描Session过期
  • jvmRoute:Tomcat集群节点的id。部署Tomcat集群时会用到该属性,

4、host(虚拟主机)节点常用属性

  • name:设置虚拟主机的域名,比如 localhost 表示本机名称,实际应用时应该填写具体域名,当然如果该虚拟主机是给内部人员访问的,也可以直接填写服务器的 ip 地址,比如 192.168.1.10。
  • autoDeploy:是否允许自动部署,默认值是 true,即表示 Tomcat 会自动检测 appBase 目录下面的文件变化从而自动应用到正在运行的 Web 应用程序。
  • unpackWARs:设置是否自动展开 war 压缩包再运行 Web 应用程序,默认值是 true。
  • appBase:设置 Web 应用程序组的路径。前面说过一个虚拟主机可以由多个 Web 应用程序构成,所以这里的 appBase 所指向的目录应该是准备用于存放这一组 Web 应用程序的目录,而不是具体某个 Web 应用程序的目录本身(即使该虚拟主机只由一个 Web 应用程序组成)。appBase 属性的值可以是相对于 Tomcat 安装目录的相对路径,也可以是绝对路径,需要注意的是该路径必须是 Tomcat 有权限访问的。

tomcat体系结构的更多相关文章

  1. B/S交互过程及tomcat体系结构

    浏览器与服务器交互过程: 1.浏览器根据主机名,如www.baidu.com,去操作系统的hosts文件中查找主机名对应的ip地址. 2.如果查找不到,则会去互联网上的dns服务器上查找主机名对应的i ...

  2. 深入分析理解Tomcat体系结构

    Tomcat整体结构 由上图可知Tomcat的顶层容器是Server,而且一个Tomcat对应一个Server,一个server有多个service提供服务.service包含两个重要组件:Conne ...

  3. 第二天:tomcat体系结构和第一个Servlet

    1.  打war包 2.  Tomcat体系再说明:   问题:如何去配置默认主机???    3.tomcat和servlet在网络中的位置 4.    servlet快速入门案例   1).开发s ...

  4. Tomcat【介绍Tomcat、结构目录、虚拟目录、临时域名、虚拟主机、体系结构】

    什么是Tomcat Tomcat简单的说就是一个运行JAVA的网络服务器,底层是Socket的一个程序,它也是JSP和Serlvet的一个容器. 为什么我们需要用到Tomcat 如果你学过html,c ...

  5. Tomcat的设置4——Tomcat的体系结构与设置基于端口号的虚拟主机

    一.Tomcat体系结构 从conf/server.xml可体现Tomcat的体系.一个Server可有多个service,一个service可以有多个连接器connector,每个连接器暴露出不同的 ...

  6. Tomcat 学习心得

    Tomcat Server的结构图 Tomcat服务器的启动是基于一个server.xml文件的,Tomcat启动的时候首先会启动一个Server,Server里面就会启动Service,Servic ...

  7. Tomcat系列之Java技术详解

    一.概述 1.前言 在前面几篇博客中,我们和大家说了负载均衡器服务器.Web服务器.反向代理服务器.缓存服务器,从这篇博客开始我们和大家说说应用程序服务器,对于上述内容不了解的博友可以去参考一下我们前 ...

  8. Servlet与Tomcat

    Web应用不仅局限于展示在服务器上的静态页面,更多的是根据用的请求动态的生成页面信息,还可以从数据库中提取数据,生成页面返回给用户. 第一种方法:遵循HTTP协议实现一个服务器端软件 第二种方法:利用 ...

  9. Tomcat安装、配置、优化及负载均衡详解

    一.常见JavaWeb服务器      1.WebLogic:是BEA公司的产品.WebSphereAS:是IBM公司的产品.JBossAS:红帽公司的产品,可以自行了解      2.Tomcat服 ...

随机推荐

  1. django drf 基础学习4

    0  简介:介绍ModelViewSet基本使用规则1 views引用以及初始化   from rest_framework.viewsets import ModelViewSet     clas ...

  2. 【转】Python3 (入门6) 库的打包与安装

    Python3 (入门6) 库的打包与安装 本文由 Luzhuo 编写,转发请保留该信息. 原文: http://blog.csdn.net/Rozol/article/details/6940288 ...

  3. k64 datasheet学习笔记25--Multipurpose Clock Generator (MCG)

    0.前言 MCG模块为MCU提供了几种可选时钟源.模块包含一个FLL和一个PLL.FLL使用内部或外部参考时钟是可控的,PLL受外部参考时钟控制 模块可以选择FLL或PLL输出时钟,或内/外部参考时钟 ...

  4. 图文解说Win7系统机器上发布C#+ASP.NET网站

      1.     概述 在一台干净的Win7机器上发布ASP.NET网站需要准备的有: a)        .NET Framework 环境 b)        数据库 c)        IIS ...

  5. 新手如何理解JS面向对象开发?

    今天有时间讲讲我对面向对象的理解跟看法,尽量用通俗的语言来表达,多多指教! 如今前端开发已经越来越火了,对于前端开发的要求也是越来越高了,在面试中,经常有面试官会问:你对JS面向对象熟悉吗? 其实,也 ...

  6. mysql备份与还原 数据库的常用命令。

    一.备份数据: Mysqldump常用命令: mysqldump -u用户名 -p密码 --databases 数据库1 数据库2 > xxx.sql 常见选项: -u: 用户名 -p: 密码 ...

  7. linux 修改history带有时间

    今天在网上学到了给linux的history添加时间.方法如下: 首先已知HISTTIMEFORMAT可以给history设置时间:临时修改直接赋值:HISTTIMEFORMAT="%F % ...

  8. java设计模式自我总结---代理模式

    代理模式是给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用,通俗的来讲代理模式就是我们生活中常见的中介. Spring 的AOP面向切面就是使用动态代理模式来实现的: 打个比方说:我要买房 ...

  9. 14.并发与异步 - 3.C#5.0的异步函数 -《果壳中的c#》

    14.5.2 编写异步函数 private static readonly Stopwatch Watch = new Stopwatch(); static void Main(string[] a ...

  10. 网络编程-Python高级语法-闭包

    什么叫闭包?通俗来说就是函数里嵌套函数,从表现形式来看,内部函数引用外部函数的作用域里的变量,那么内部函数就称为闭包 举例说明: 1.闭包=函数块+定义函数时的环境,inner就是函数块,x就是环境 ...