• web服务器专题:tomcat(一)基础及模块


    Web服务器专题:Tomcat(一)基础及模块

    针对java系的经典服务器,打算系统的整理一下Tomcat的机制和一些原理,以此记录。

    插一则题外话,关于tomat这个名字的由来:Tomcat 名称的由来

    关于Tomcat

    基础的 tomcat 内容就不过多赘述了,基本的百度百科都可以看到,在这里我想从catlina入手介绍一下tomcat,我想很多人刚开始接触tomcat,不论是日志里,bin目录下的脚本里,都会看见catlina这个东西,都会很困惑,什么是 Catlina,说到 Catlina,就要介绍一些tomcat相比于Apache 的不同之处,简单来说,Apache主要用来处理网络中的静态资源请求(HTML,CSS、图片等),而tomcat是专为java的servlet而生的,简单来说就是为J2EE提供环境的, 用来解析动态的资源处理(即后端的业务处理,动态数据等)的部分就被称为 Catlina。

    tomcat 继承了Apache 作为web服务器的基本功能,本身包含了三个重要的组成:

    处理 html, js, css等 静态页面的Web容器;

    根据不同的请求来调用不同的servlet的servlet容器Catlina;

    编译jsp的引擎Jasper

    其实Catlina就是一个Servlet容器,它也是tomcat区别于其他服务器的核心,整个Tomcat最核心的事就是进行Servlet的管理和根据前端的请求进行调度。

    Tomcat的目录层级及常用文件

    首先简单记录一下Tomcat的文件目录及一些常用的文件。

    Tomcat的目录:

    |---bin://存放启动和关闭tomcat脚本

      |---conf://存放不同的配置文件(server.xml和web.xml);
      |---doc://存放Tomcat文档;
      |---lib/japser/common://存放Tomcat运行需要的库文件(JARS);
      |---logs://存放Tomcat执行时的LOG文件;
      |---src://存放Tomcat的源代码;
      |---webapps://Tomcat的主要Web发布目录(包括应用程序示例);
      |---work://存放jsp编译后产生的class文件;

    以上目录中,一般我们基本开发部署中常用的基本就  bin  、conf 、logs三个,其中 tomcat 的系统级启动shell、bat文件均在bin目录下,具体环境变量及启动流程,都可以在start.sh或start.bat中查看源码,这里就不多说了,就主要说一下 conf 目录下的文件吧:

    server.xml: Tomcat的主配置文件,包含Service, Connector, Engine, Realm, Valve, Hosts主组件的相关配置信息;

         web.xml:遵循Servlet规范标准的配置文件,用于配置servlet,并为所有的Web应用程序提供包括MIME映射等默认配置信息;

    tomcat-user.xml:Realm认证时用到的相关角色、用户和密码等信息;Tomcat自带的manager默认情况下会用到此文件;在Tomcat中添加/删除用户,为用户指定角色等将通过编辑此文件实现;

         catalina.policy:Java相关的安全策略配置文件,在系统资源级别上提供访问控制的能力;

         catalina.properties:Tomcat内部package的定义及访问相关控制,也包括对通过类装载器装载的内容的控制;Tomcat在启动时会事先读取此文件的相关设置;

         logging.properties: Tomcat6通过自己内部实现的JAVA日志记录器来记录操作相关的日志,此文件即为日志记录器相关的配置信息,可以用来定义日志记录的  组件级别以及日志文件的存在位置等;

         context.xml所有host的默认配置信息;

    Tomcat架构

    Tomcat的设计是基于模块化设计的,内部主要依赖于不同的模块组件构成, 这里打算图解一下Tomcat的内置组件及 一条请求的主要流程,话不多说,先上图:

    一句话简单概括,一个tomcat只有一个Server作为根,它管理着多个Service服务,而Service服务又管理着多个Connector以及一个Container,其中核心组件为Connector以及Container

    Server组件

    从图中可以看出,一个Tomcat只能有一个Server,Server就是一个Tomcat的实例。

    Service组件

    Service其实是一个集合,它将Connector组件与Container组件包装组合在一起(一个Service可以有多个Connector和一个Container),对外进行服务,而Service又是运行在Server中,也就是说,一个Tomcat可以有多个service

    Connector组件

     该组件主要负责监听指定端口的客户端请求(不同端口对应不同的Connect组件),将Socket请求过来的数据,都封装成Request请求对象,同时将该请求对象 传递给Container容器进行下一步的处理。

    Container组件

    Container组件才是最接近Web应用的组件,它负责根据请求进行一系列的servlet调用,本身Container又包含四个子容器:EngineHostContextWrapper

    Container的容器组合如下图:

    Engine :引擎,用来管理多个站点, 一个Service最多只能有一个Engine
    Host :代表一个站点,也可以叫虚拟主机,通过配置Host 就可以添加站点;
    Context :代表一个应用程序,即为我们开发的一个war服务在webapp目录下的各个应用,或者一个WEB-INF 目录以及下面的web.xml 文件;
    Wrapper :每个Wrapper 封装着一个servlet

    一次完整的流程:

    1、当我们浏览器点击事件发生,发送了一个http/https的请求,首先到达tomcat,即运行的实例server中

    2、该请求被监听 8080 端口的 connector监听到,获取请求报文后,封装成Request请求,并将该请求发往Engine

    3、Engine根据请求的url,搜寻使用哪个Host

    4、当相应的Host获取该请求后,根据请求中的地址,找寻相应的Context来处理该请求

    5、Context根据其内部的映射表,获取相应的servlet,并构造HttpServletRequest对象和HttpServletResponse对象,进行业务处理

    6、Context将处理完的HttpServletResponse对象返回给Host

    7、Host再将结果返回Engine

    8、Engine中心调度,将结果返回给 connector

    9、connector将结果返归给客户端

     

    进发:web服务器专题:tomcat(二)模块组件与server.xml 配置文件   

     

     

     

     

  • 相关阅读:
    【转】一句话设计模式
    【转】Bad Smell(代码的坏味道)
    【转】[重构]Primitive Obsession
    【转】22种代码的坏味道,一句话概括
    【转】C#中的implicit 和 explicit
    【转】100本最棒的英文侦探小说
    [转]Visual Studio调试之符号文件
    【转】简要分析unity3d中剪不断理还乱的yield
    apache https配置步骤
    apache https配置步骤
  • 原文地址:https://www.cnblogs.com/TheGCC/p/14077901.html
Copyright © 2020-2023  润新知