1 - Tomcat Server的组成部分
1.1 - Server

A Server element represents the entire Catalina servlet container. (Singleton)

1.2 - Service

A Service element represents the combination of one or more Connector components that share a single Engine
Service是这样一个集合:它由一个或者多个Connector组成,以及一个Engine,负责处理全部Connector所获得的客户请求

1.3 - Connector

一个Connector将在某个指定port上侦听客户请求,并将获得的请求交给Engine来处理,从Engine处获得回应并返回客户
TOMCAT有两个典型的Connector。一个直接侦听来自browser的http请求,一个侦听来自其他WebServer的请求
Coyote Http/1.1 Connector 在port8080处侦听来自客户browser的http请求
Coyote JK2 Connector 在port8009处侦听来自其他WebServer(Apache)的servlet/jsp代理请求

1.4 - Engine

The Engine element represents the entire request processing machinery associated with a particular Service
It receives and processes all requests from one or more Connectors
and returns the completed response to the Connector for ultimate transmission back to the client
Engine下能够配置多个虚拟主机Virtual Host,每一个虚拟主机都有一个域名
当Engine获得一个请求时。它把该请求匹配到某个Host上,然后把该请求交给该Host来处理
Engine有一个默认虚拟主机,当请求无法匹配到不论什么一个Host上的时候,将交给该默认Host来处理

1.5 - Host

代表一个Virtual Host。虚拟主机。每一个虚拟主机和某个网络域名Domain Name相匹配
每一个虚拟主机下都能够部署(deploy)一个或者多个Web App,每一个Web App相应于一个Context。有一个Context path
当Host获得一个请求时,将把该请求匹配到某个Context上。然后把该请求交给该Context来处理
匹配的方法是“最长匹配”,所以一个path==""的Context将成为该Host的默认Context
全部无法和其他Context的路径名匹配的请求都将终于和该默认Context匹配

1.6 - Context

一个Context相应于一个Web Application,一个Web Application由一个或者多个Servlet组成
Context在创建的时候将依据配置文件$CATALINA_HOME/conf/web.xml和$WEBAPP_HOME/WEB-INF/web.xml加载Servlet类
当Context获得请求时。将在自己的映射表(mapping table)中寻找相匹配的Servlet类
假设找到。则运行该类,获得请求的回应,并返回

2 - Tomcat Server的结构图
 
3 - 配置文件$CATALINA_HOME/conf/server.xml的说明
该文件描写叙述了怎样启动Tomcat Server

<!----------------------------------------------------------------------------------------------->

<!-- 启动Server
     在port8005处等待关闭命令
     假设接受到"SHUTDOWN"字符串则关闭server
     -->

<Server port="8005" shutdown="SHUTDOWN" debug="0">

<!-- Listener ?

??
       眼下没有看到这里
       -->

<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" debug="0"/>
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" debug="0"/>

<!-- Global JNDI resources ???

眼下没有看到这里。先略去
       -->

<GlobalNamingResources>
    ... ... ... ...
  </GlobalNamingResources>

<!-- Tomcat的Standalone Service
       Service是一组Connector的集合
       它们共用一个Engine来处理全部Connector收到的请求
       -->

<Service name="Tomcat-Standalone">

<!-- Coyote HTTP/1.1 Connector
         className : 该Connector的实现类是org.apache.coyote.tomcat4.CoyoteConnector
         port : 在端口号8080处侦听来自客户browser的HTTP1.1请求
         minProcessors : 该Connector先创建5个线程等待客户请求。每一个请求由一个线程负责
         maxProcessors : 当现有的线程不够服务客户请求时,若线程总数不足75个,则创建新线程来处理请求
         acceptCount : 当现有线程已经达到最大数75时,为客户请求排队
                       当队列中请求数超过100时,后来的请求返回Connection refused错误
         redirectport : 当客户请求是https时,把该请求转发到端口8443去
         其他属性略
         -->

<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
               port="8080"
               minProcessors="5" maxProcessors="75" acceptCount="100"
               enableLookups="true"
               redirectPort="8443"
               debug="0"
               connectionTimeout="20000"
               useURIValidationHack="false"
               disableUploadTimeout="true" />

<!-- Engine用来处理Connector收到的Http请求
         它将匹配请求和自己的虚拟主机。并把请求转交给相应的Host来处理
         默认虚拟主机是localhost
         -->

<Engine name="Standalone" defaultHost="localhost" debug="0">

<!-- 日志类,眼下没有看到,略去先 -->

<Logger className="org.apache.catalina.logger.FileLogger" .../>

<!-- Realm。眼下没有看到,略去先 -->

<Realm className="org.apache.catalina.realm.UserDatabaseRealm" .../>

<!-- 虚拟主机localhost
           appBase : 该虚拟主机的根文件夹是webapps/
           它将匹配请求和自己的Context的路径。并把请求转交给相应的Context来处理
           -->

<Host name="localhost" debug="0" appBase="webapps" unpackWARs="true" >

<!-- 日志类。眼下没有看到,略去先 -->

<Logger className="org.apache.catalina.logger.FileLogger" .../>

<!-- Context,相应于一个Web App
             path : 该Context的路径名是""。故该Context是该Host的默认Context
             docBase : 该Context的根文件夹是webapps/mycontext/
             -->

<Context path="" docBase="mycontext" debug="0"/>

<!-- 另外一个Context,路径名是/wsota -->

<Context path="/wsota" docBase="wsotaProject" debug="0"/>
            
       
      </Host>
     
    </Engine>

</Service>

</Server>

<!----------------------------------------------------------------------------------------------->

4 - Context的部署配置文件web.xml的说明
一个Context相应于一个Web App,每一个Web App是由一个或者多个servlet组成的
当一个Web App被初始化的时候,它将用自己的ClassLoader对象加载“部署配置文件web.xml”中定义的每一个servlet类
它首先加载在$CATALINA_HOME/conf/web.xml中部署的servlet类
然后加载在自己的Web App根文件夹下的WEB-INF/web.xml中部署的servlet类
web.xml文件有两部分:servlet类定义和servlet映射定义
每一个被加载的servlet类都有一个名字,且被填入该Context的映射表(mapping table)中,和某种URL PATTERN相应
当该Context获得请求时。将查询mapping table,找到被请求的servlet,并运行以获得请求回应

  分析一下全部的Context共享的web.xml文件,在当中定义的servlet被全部的Web App加载

<!----------------------------------------------------------------------------------------------->

<web-app>

<!-- 概述:
       该文件是全部的WEB APP共用的部署配置文件,
       每当一个WEB APP被DEPLOY,该文件都将先被处理,然后才是WEB APP自己的/WEB-INF/web.xml
       -->

<!--  +-------------------------+  -->
  <!--  |    servlet类定义部分    |  -->
  <!--  +-------------------------+  -->

<!-- DefaultServlet
       当用户的HTTP请求无法匹配不论什么一个servlet的时候,该servlet被运行
       URL PATTERN MAPPING : /
       -->

<servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>
          org.apache.catalina.servlets.DefaultServlet
        </servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

<!-- InvokerServlet
       处理一个WEB APP中的匿名servlet
       当一个servlet被编写并编译放入/WEB-INF/classes/中,却没有在/WEB-INF/web.xml中定义的时候
       该servlet被调用。把匿名servlet映射成/servlet/ClassName的形式
       URL PATTERN MAPPING : /servlet/*
       -->

<servlet>
        <servlet-name>invoker</servlet-name>
        <servlet-class>
          org.apache.catalina.servlets.InvokerServlet
        </servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>

<!-- JspServlet
       当请求的是一个JSP页面的时候(*.jsp)该servlet被调用
       它是一个JSP编译器,将请求的JSP页面编译成为servlet再运行
       URL PATTERN MAPPING : *.jsp
       -->

<servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
        <init-param>
            <param-name>logVerbosityLevel</param-name>
            <param-value>WARNING</param-value>
        </init-param>
        <load-on-startup>3</load-on-startup>
    </servlet>

<!--  +---------------------------+  -->
  <!--  |    servlet映射定义部分    |  -->
  <!--  +---------------------------+  -->

<servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

<servlet-mapping>
        <servlet-name>invoker</servlet-name>
        <url-pattern>/servlet/*</url-pattern>
    </servlet-mapping>

<servlet-mapping>
        <servlet-name>jsp</servlet-name>
        <url-pattern>*.jsp</url-pattern>
    </servlet-mapping>

<!--  +------------------------+  -->
  <!--  |    其他部分,略去先    |  -->
  <!--  +------------------------+  -->

... ... ... ...

</web-app>

<!----------------------------------------------------------------------------------------------->

5 - Tomcat Server处理一个http请求的过程
如果来自客户的请求为:
http://localhost:8080/wsota/wsota_index.jsp

1) 请求被发送到本机port8080,被在那里侦听的Coyote HTTP/1.1 Connector获得

2) Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应

3) Engine获得请求localhost/wsota/wsota_index.jsp,匹配它所拥有的全部虚拟主机Host

4) Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,由于该Host被定义为该Engine的默认主机)

5) localhost Host获得请求/wsota/wsota_index.jsp,匹配它所拥有的全部Context

6) Host匹配到路径为/wsota的Context(假设匹配不到就把该请求交给路径名为""的Context去处理)

7) path="/wsota"的Context获得请求/wsota_index.jsp。在它的mapping table中寻找相应的servlet

8) Context匹配到URL PATTERN为*.jsp的servlet,相应于JspServlet类

9) 构造HttpServletRequest对象和HttpServletResponse对象,作为參数调用JspServlet的doGet或doPost方法

10)Context把运行完了之后的HttpServletResponse对象返回给Host

11)Host把HttpServletResponse对象返回给Engine

12)Engine把HttpServletResponse对象返回给Connector

13)Connector把HttpServletResponse对象返回给客户browser

tomcat之组成结构相关推荐

  1. 【Tomcat】安装Tomcat服务器Tomcat的目录结构

    创建时间:6.14 一.安装Tomcat服务器 Tomcat下载ver8的,现在用的多 下载并解压 配置环境变量:(切记!!不然startup那步会闪退) 1.新建系统环境变量: (1)进入根目录,复 ...

  2. nginx+tomcat动静分离结构

    本文采用另一种策略对动静分离进行演示,它的大致结构如图 2 所示. 图 2. 本文设计的动静分离结构 在本文中,我们将静态资源放在 A 主机的一个目录上,将动态程序放在 B 主机上,同时在 A 上安装 ...

  3. Tomcat服务器目录结构

    对于开发人员来说,经常会用到Tomcat服务器,它用起来简单,比较实用. 1.Tomcat的下载 1.请先确认你的JDK版本(在cmd窗口输入 java -version) 因为我安装的是Tomcat ...

  4. Tomcat的目录结构详细介绍-解压版

    打开tomcat的解压之后的目录可以看到如下的目录结构:  1.bin: bin目录主要是用来存放该目录下存放二进制的可执行文件.这些文件主要有两大类,一类是以.sh结尾的(linux命令),另一类是 ...

  5. Tomcat 的目录结构

    bin:存放的是可执行文件,比如启动和关闭服务器的一些脚本命令 conf:存放的是 Tomcat 服务器的各种全局配置文件,其中包括 server.xml(Tomcat的主要配置文件).tomcat- ...

  6. Tomcat的目录结构详解

    安装完(*.exe的)或者解压完(*.zip的)tomcat后会得到以下文件目录,各个目录所包含的内容如下图: conf目录中: server.xml文件:该文件用于配置和server相关的信息,比如 ...

  7. tomcat目录及结构

    目录 内容 bin 主要是用来存放tomcat的命令 conf 主要是用来存放tomcat的一些配置文件 lib 主要用来存放tomcat运行需要加载的jar包 logs 存放tomcat在运行过程中 ...

  8. Tomcat服务器目录结构详解

    Tomcat-8目录详解 Tomcat目录如下 /bin目录 存放wendows或者是Linux启动和关闭tomcat的脚本文件 /bin/catalina.sh 用于启动和关闭tomcat服务器 / ...

  9. Tomcat软件的目录结构、作用

    要了解Tomcat的目录结构,首先要知道什么是Tomcat? Tomcat是一个Apache软件基金会Jakarta项目中的核心项目:是一个免费的开放源代码的轻量级Web应用服务器:运行时占用资源小, ...

  10. tomcat 目录结构 web 目录结构

    TOMCAT的目录结构 /bin:存放windows或Linux平台上启动和关闭Tomcat的脚本文件 /conf:存放Tomcat服务器的各种全局配置文件,其中最重要的是server.xml和web ...

最新文章

  1. Netflix网关zuul(1.x和2.x)全解析
  2. python中的几种倒序遍历
  3. 栈和队列的区别,栈和堆的区别
  4. swift 2.1 安裝與下載
  5. java 全局代码区_MyEclipse设置全局编码
  6. 服务器系统是指什么,服务器操作系统指的是什么
  7. 【知识图谱】阿里巴巴电商知识图谱
  8. OA自动化制造自动化
  9. 使用pg_repack实现在线vacuum
  10. 学会了这些!你就是天下间的美容高手
  11. 2021年危险化学品生产单位安全生产管理人员考试题及危险化学品生产单位安全生产管理人员最新解析
  12. windows下tomcat设置开机自启
  13. 互联网日报 | 5月9日 星期日 | 特斯拉Model3宣布涨价;奈雪回应“6月中上旬上市”;FF91将在纽约与消费者见面...
  14. P1941 [NOIP2014 提高组] 飞扬的小鸟——解题报告
  15. 买计算机硬件配置,买笔记本电脑时如果只看硬件配置,那就大错特错了
  16. AD620仪表放大器介绍
  17. 知识点 - 因数之和 因数个数公式
  18. 电脑改装linux游戏机下载,将 GameShell 改造为下载利器
  19. oracle crs 4639,处理CRS-4639和CRS-4000错误
  20. 如何在国际学术会议上作一场精彩的口头报告

热门文章

  1. 自动按键 回车 变成_【按键大扫荡】驾驶员的“眼”
  2. java证书不见了_java – 找不到证书链
  3. 凯立德地图导航2020年最新版_曾是导航领域“领头羊”的凯立德,如今为何岌岌可危?...
  4. 帆软控件焦点事件设置可用性
  5. linux安装 web2py,TurnkeyLinux上用于Web2Py到MySQL的DAL连接字符串
  6. ajax escape用法,ie11下ajax用escape发送中文参数失败
  7. 在线制作车牌效果图_价格低的防火板材行业专家在线为您服务
  8. GO随笔-Web简读
  9. [Mongodb]安装与启动
  10. 【Android布局】在程序中设置android:gravity 和 android:layout_Gravity属性——位置设置偏向...