精华内容
下载资源
问答
  • Tomcat结构

    2015-07-09 08:45:19
    1. Tomcat结构 Tomcat是一个基于组件的服务器,它的构成组件都是可配置的,其中最外层的组件是Catalina Servlet容器,其他的组件按照一定的格式要求配置在这个顶层容器中。Tomcat的各个组件是在\conf\server.xml...

    1. Tomcat结构
    Tomcat是一个基于组件的服务器,它的构成组件都是可配置的,其中最外层的组件是Catalina Servlet容器,其他的组件按照一定的格式要求配置在这个顶层容器中。Tomcat的各个组件是在<TOMCAT_HOME>\conf\server.xml文件中配置的,Tomcat服务器默认情况下对各种组件都有默认的实现,下面通过分析server.xml文件来理解Tomcat的各个组件是如何组织的。server.xml文件的基本组成结构如下。


    XML配置文件结构
    <Server>                     顶层类元素:一个配置文件中只能有一个<Server>元素,可包含多个Service。
        <Service>                顶层类元素:本身不是容器,可包含一个Engine,多个Connector。
            <Connector/>         连接器类元素:代表通信接口。
               <Engine>   容器类元素:为特定的Service组件处理所有客户请求,可包含多个Host。
                  <Host>    容器类元素:为特定的虚拟主机处理所有客户请求,可包含多个Context。
                     <Context>   容器类元素:为特定的Web应用处理所有客户请求。
                     </Context>
                   </Host>
                  </Engine>
         </Service>
    </Server>

    1)Service
    Service组件是一些Connector组件的集合,它本身不是一个容器,所以在这里不能定义日志等组件。一个Service组件中只能有一个Engine组件,可以包含多个Connector组件。

    2)Connector组件
    Connector组件表示一个接口,通过这个接口接收客户的请求,然户发送给其他的容器组件,最后再把服务器的响应结果传递给客户。

    3) Engine, Host和context
    上面介绍的3个组件本身并不能处理客户请求,也不能生成响应。在Tomcat中只有3个组件是可以处理客户请求并生成响应的,这3个组件分别是 Engine、Host和Context组件。这3个组件分别代表了不同的服务范围,通过嵌套关系可以知道3个组件的范围有如下的关系:Engine>Host>Context。
    a.Engine组件下可以包含多个Host组件,它为特定的Service组件处理所有客户请求。
    b.一个Host组件代表一个虚拟主机,一个虚拟主机中可以包含多个Web应用(Context组件)。
    c.Context组件代表一个Web应用。
    Tomcat的各个组件关系,可以用下图描述。

     

    2. Tomcat处理一个HTTP请求的过程
    假设来自客户的请求为: http://localhost:8080/wsota/wsota_index.jsp 
    1) 请求被发送到本机端口8080,被在那里侦听的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结构简介

    2018-03-12 20:56:02
    Tomcat结构简介 Tomcat结构简介 结构简图 概述 说明 Catalina Lifecycle Server Service Container Engine Host Context Wrapper Pipeline Valve Connector/ProtocolHandler/AbstractEndPoint 结构简图...

    Tomcat结构简介

    结构简图

    Tomcat结构简图

    概述

    Tomcat中组件大致分为两个部分,一部分为用来处理请求(Server、Service、Connctor等),另一部分来定义内部的结构(Engine、Host、Context等)。

    上图中Lifecycle以及Container框住的部分,都是自身的子接口。下文中的关键属性主要指的是与结构相关的属性。

    说明

    Catalina

    • 全类名

      org.apache.catalina.startup.Catalina

    • 意义

      此类一般用于与外部命令交互,提供Tomcat程序整体的启停操作。

    • 关键属性

      server(org.apache.catalina.Server)[1]:Catalina通过此属性与Tomcat服务器交互。

    • 关键方法

      load():解析Tomcat的server.xml并根据配置内容实例化各个部分对象,最终解析出一个Server接口实现类的实例。

      start()/stop():启动/停止Tomcat。

    Lifecycle

    • 全类名

      org.apache.catalina.Lifecycle

    • 默认实现类

      org.apache.catalina.util.LifecycleBase

    • 意义

      Tomcat中大多数组件都间接的实现了此接口,此接口用于统一控制各个级别组件的声明周期,并提供了生命周期事件监听器。

      上图中Lifecycle框内的类都是间接实现此接口的接口、类。

      Tomcat中生命周期图可以查阅org.apache.catalina.Lifecycle接口的注释,这里需要补充的是这种结构充分利用了状态模式

    • 关键方法

      addLifecycleListener():添加生命周期监听事件。

      init():初始化方法

      start():启动方法

      stop():停止方法

      destroy():销毁方法

    Server

    • 全类名

      org.apache.catalina.Server

    • 默认实现类

      org.apache.catalina.core.StandardServer

    • 意义

      可以理解为Tomcat服务器(Tomcat顶级组件)的抽象。我们常说的Tomcat服务器一般指的就是Server对象,且其实现类StandardServer为final类,不可继承。可以认为在Java代码方面,整个Tomcat在运行过程中就是一个StandardServer实例。

    • 关键属性

      services(org.apache.catalina.Service)[1..*]:一个服务器中包含有多个服务。

    Service

    • 全类名

      org.apache.catalina.Service

    • 默认实现类

      org.apache.catalina.core.StandardService

    • 意义

      一个Tomcat服务器可以有多个Service,每个Service代表一个Tomcat服务,不是Web应用。每个Tomcat服务是对应一个Tomcat中的顶级容器(Engine),同时包含了一组Connector。

    • 关键属性

      container(org.apache.catalina.Container)[1]:指向服务自身对应的容器,一般为Engine,服务通过此属性调用对应容器以及容器子容器的生命周期方法或其他方法。

      connections(org.apache.catalina.connector.Connector)[1..*]:指向本服务提供的Socket端口,通过此属性调用连接实例。

    Container

    • 全类名

      org.apache.catalina.Container

    • 默认实现类

      org.apache.catalina.core.ContainerBase,此类是Container接口的一级抽象类。

    • 意义

      Tomcat中的容器指的是可以处理客户端请求以及将响应返回给客户端的对象,任何容器内部都支持通过pipeline方式组织的Valve,来顺序配置请求。

    • 特殊说明

      Container相比Lifecycle,有自己的监听器,用于监听容器内部的事件,例如添加/删除Valve等。但是,容器启动和停止是生命周期事件

    • 关键属性

      children(java.util.HashMap)[1]:以容器名称-容器实例的方式存储当前容器的子容器。

      parent(org.apache.catalina.Container)[0..1]:当前容器的父容器,无父容器时为null。

      pipeline(org.apache.catalina.Pipeline)[1]:保存容器对应的Pipeline实例。

    Engine

    • 全类名

      org.apache.catalina.Engine

    • 默认实现类

      org.apache.catalina.core.StandardEngine

    • 意义

      Engine一般为Tomcat容器结构中的顶级容器,其子容器一般为Host。Engine即提供Servlet服务的基础引擎。

    • 关键属性

      service(org.apache.catalina.Service)[0..1]:Engine对应的service。

    Host

    • 全类名

      org.apache.catalina.Host

    • 默认实现类

      org.apache.catalina.core.StandardHost

    • 意义

      Host,即为在Tomcat中的一个虚拟的服务主机,其定义的appBase属性定义了此主机的根路径。其子容器一般为提供具体服务的Context。

    Context

    • 全类名

      org.apache.catalina.Context

    • 默认实现类

      org.apache.catalina.core.StandardContext

    • 意义

      Context即为在开发具体web应用时直接相关的容器,每一个web应用都对应的一个Context实例。在Servlet中使用的到各种全局变量都是在Context中保存的,比如applicationListeners、ApplicationContext等。Context的子容器一般为Wrapper。

    Wrapper

    • 全类名

      org.apache.catalina.Wrapper

    • 默认实现类

      org.apache.catalina.core.StandardWrapper

    • 意义

      每一个Wrapper内包含一个web.xml中定义的servlet,这个servlet可以是单例的(默认情况),也可以是通过实现SingleThreadModel接口作为原型。Wrapper提供对某一类型servlet的统一处理,包括init、destroy等。Wrapper是最d底层的容器,父容器一般为Context,无子容器。

    • 关键属性

      instance(javax.servlet.Servlet)[1]:Wrapper对应的Servlet接口实现类的实例。

    Pipeline

    • 全类名

      org.apache.catalina.Pipeline

    • 默认实现类

      org.apache.catalina.core.StandardPipeline

    • 意义

      链表存储的Valve数据结构,里边保存了容器对相应的所有Valve。内部的Valve连接从头(first)开始执行直至最后(basic)一个Valve。

    • 关键属性

      basic(org.apache.catalina.Valve)[1]:最后执行的Valve,一般在容器构造方法时指定。

      first(org.apache.catalina.Valve)[1]:第一个执行的Valve,如果不存在则直接使用basic。

    Valve

    • 全类名

      org.apache.catalina.Valve

    • 意义

      Valve与容器相关,可以处理传入容器的request和传出容器的resposne(比如记录日志、添加属性、检查某些信息等)。不要在Valve的invoke方法中修改request和response的关键属性。

    Connector/ProtocolHandler/AbstractEndPoint

    以上三个类中Connector和ProtocolHandler都是Tomcat内部的用于处理连接包coyote中的内容,而AbstractEndPoint是帮助类,用于帮助处理连接。详细内容请参见:Tomcat中的连接处理。

    展开全文
  • 浅析Tomcat结构以及自定义嵌入式Tomcat TOMCAT结构 <Server port="8005" shutdown="SHUTDOWN"> <Service name="Catalina"> <Connector port="8080" protocol="HTTP/1.1" connection...

    浅析Tomcat结构以及自定义嵌入式Tomcat

    TOMCAT结构

    	<Server port="8005" shutdown="SHUTDOWN">
    	 
    	  <Service name="Catalina">
    	
    	    <Connector port="8080" protocol="HTTP/1.1"
    	               connectionTimeout="20000"
    	               redirectPort="8443" URIEncoding="UTF-8"/>
    	
    	    <Engine name="Catalina" defaultHost="localhost">
    	
    	      <Host name="localhost"  appBase="webapps"
    	            unpackWARs="true" autoDeploy="true">
    	         <Context path="" docBase="WORKDIR" reloadable="true"/>
    	      </Host>
    		  
    	    </Engine>
    	    
    	  </Service> 
    	  
    	</Server>
    

    1.maven引入所依赖的jar包

     <!--tomcat 嵌入式包-->
            <dependency>
                <groupId>org.apache.tomcat.embed</groupId>
                <artifactId>tomcat-embed-core</artifactId>
                <version>10.0.2</version>
            </dependency>
    

    2.根据Tomcat 加载XML格式,创建Tomcat启动类

    public class HttpTomcat {
      
        public  void start(String hostname,Integer port){
    
            //1.创建Tomcat
            Tomcat tomcat=new Tomcat();
    
            //2.获取server
            Server server = tomcat.getServer();
    
            //3.发现service
            Service service = server.findService("Tomcat");
    
            //4.新建连接
            Connector connector = new Connector();
            //设置端口号
            connector.setPort(port);
            //设置编码
            connector.setURIEncoding("UTF-8");
    
            //5.新建引擎
            Engine engine = new StandardEngine();
            //设置默认host
            engine.setDefaultHost(hostname);
    
            //6.新建主机
            Host host = new StandardHost();
            host.setName(hostname);
    
            //7.新建上下文
            String contextPath="";
            Context context=new StandardContext();
    
            //8.逐层将数据放入
            context.setPath(contextPath);
            context.addLifecycleListener(new Tomcat.FixContextListener());
    
            host.addChild(context);
            engine.addChild(host);
    
            service.setContainer(engine);
            service.addConnector(connector);
    
            //9.前端分发器
            tomcat.addServlet(contextPath,"dispatcher",new DispatcherServlet());
            context.addServletMappingDecoded("/*","dispatcher");
    
            try {
                tomcat.start();
                tomcat.getServer().await();
            } catch (LifecycleException e) {
                e.printStackTrace();
            }
    
        }
    }
    

    3.继承HttpSevlet,自定义前端分发器,实现get,post方法

    public class DispatcherServlet  extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            super.doGet(req, resp);
            System.out.println("get");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            super.doPost(req, resp);
            System.out.println("post");
        }
    }
    

    4.使用main方法启动

    public class ProviderApplication {
        public static void main(String[] args) {
            //启动tomcat
            HttpTomcat tomcat=new HttpTomcat();
            tomcat.start("localhost",9000);
        }
    }
    

    5.控制台打印结果

    在这里插入图片描述

    展开全文
  • Tomcat结构目录

    2019-06-03 19:32:01
    tomcat结构目录 目录的简单介绍 bin目录:存放的是启动和关闭Tomcat的bat文件 conf目录:存放的是配置文件 serser.xml文件 :该文件用于配置server相关的信息 web.xml文件:文件配置与web应用 Tomcat_...

    tomcat结构目录

    目录的简单介绍

    bin目录:存放的是启动和关闭Tomcat的bat文件

    conf目录:存放的是配置文件

            serser.xml文件 :该文件用于配置server相关的信息

            web.xml文件:文件配置与web应用

           Tomcat_user文件:配置用户名密码和相关权限

    lib目录:存放运行Tomcat运行时所需的jar包

    logs目录:存放日志文件,可查询信息

    tmp目录:存放运行Tomcat时用到的临时文件

    webapps目录:存放我们的web应用,(就是存放我们的项目文件夹)与eclipse的web项目的WebRoot目录一样。

    work目录:工作目录,用来存放jsp被访问后生成对应的server文件和.class文件

    Tomcat的web站点的目录规范:

     

    为什么要这样设置web站点目录呢?

    • 需求:我有多个html文件,想把其中的一个html文件作为我web站点的首页。
    • 如果没有WEB-INF目录下的web.xml文件支持,是无法解决我的需求的
    • 这个规范是约定熟成的。

    下面将web站点下的helloword2.xml文件作为站点的首页

    • 新建一个WEB-INF目录

    • 在WEB-INF目录下创建一个web.xml

    • web.xml我们不可能会写,所以可以在webapps目录下其他的站点中抄一份过来【复制ROOT/WEB-INF/web.xml的文件到自己的站点中】

    • 在web.xml中添加以下代码
    
          <welcome-file-list>
                <welcome-file>helloword2.html</welcome-file>
          </welcome-file-list>
    

    • 访问web站点【helloword2.html已经是web站点的首页了,所以不需要指定资源访问了

    Tomcat体系结构 

    浏览器访问WEB资源的流程图 

    展开全文
  • Tomcat结构

    2014-11-06 11:44:56
    Tomcat结构图 转载于:https://blog.51cto.com/xiongda/1573053
  • Tomcat 结构图级比喻

    2017-08-21 16:35:19
    Tomcat 结构图级比喻
  • tomcat 结构分析

    2018-12-04 22:21:33
    Tomcat的主要组成结构可以参考Tomcat的配置文件$TOMCAT_HOME/conf/server.xml,里面包含各层级结构和相关配置。 Tomcat是web服务器的一种,一个Tomcat就是一个Server服务,里面可以有多个Service服务,每个...
  • Tomcat 结构目录

    2019-12-04 18:19:23
    1、bin:存放了启动Tomcat软件的命令,这些命令可以在Windows和Linuxf操作系统上运行。 2、conf:保存了配置Tomcat的配置文件。 server.xml: a、http协议默认端口号为80 tomcat默认端口号为8080 在server.xml文件...
  • 1. Tomcat结构 Tomcat是一个基于组件的服务器,它的构成组件都是可配置的,其中最外层的组件是Catalina Servlet容器,其他的组件按照一定的格式要求配置在这个顶层容器中。Tomcat的各个组件是在\conf\server.xml...
  • Tomcat结构体系

    2018-04-18 20:52:42
    先上一张Tomcat的顶层结构图(图A),如下: Tomcat中最顶层的容器是Server,代表着整个服务器,从上图中可以看出,一个Server可以包含至少一个Service,用于具体提供服务。 Service主要包含两个部分:Conn...
  • tomcat 结构及设计.pptx

    2019-06-06 22:52:16
    详细的介绍了tomcat的组成结构、生命周期管理以及管道机制。
  • Tomcat 结构概述

    2006-12-05 18:31:00
    Tomcat 结构概述1.Tomcat结构概述 Tomcat服务器是由一系列可配置的组件构成,其核心组件是Catalina Servlet容器,它是所有其他Tomcat组件的顶层容器。Tomcat的组件可以在/conf/server.xml文件中进行配置,每个...
  • Tomcat 结构概述

    2012-02-03 09:24:54
    详细的介绍了Tomcat 服务器的整体架构,是份好东西。
  • 一、Tomcat结构 模块组成结构:Tomcat 的核心组件就 Connector 和 Container,一个Connector+一个Container(Engine)构成一个Service,Service就是对外提供服务的组件,有了Service组件Tomcat就能对外提供服务了,...
  • tomcat结构简述

    2018-07-11 15:34:52
    tomcat总体模块如下图,其中Connector和Container是核心,将核心和其他组件封装形成一个service。给service提供一个生存环境,控制其生命周期,即Server。Connector组件Connector用来接收浏览器发过来的TCP连接请求...
  • 1. Tomcat结构 Tomcat是一个基于组件的服务器,它的构成组件都是可配置的,其中最外层的组件是Catalina Servlet容器,其他的组件按照一定的格式要求配置在这个顶层容器中。Tomcat的各个组件是在\conf\server.xml...
  • Tomcat结构以及处理一个请求的过程

    千次阅读 2016-03-18 10:30:32
    1. Tomcat结构 Tomcat是一个基于组件的服务器,它的构成组件都是可配置的,其中最外层的组件是Catalina Servlet容器,其他的组件按照一定的格式要求配置在这个顶层容器中。Tomcat的各个组件是在\conf\server.xml...
  • Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,因为Tomcat 技术先进、性能稳定,而且...本篇文章主要讲解tomcat主要目录结构及各结构下的文件的作用;最后讲述下tomcat部署的三种方式。
  • tomcat是一个web容器 是基于socket,socketserver这种编程模式逐步发展...tomcat 内部结构层次 Server:表示tomcat service: connnector: Engine: host:类似于虚拟主机,一个tomcat可以配置多个host,部署多个we
  • Tomcat结构体系&amp;配置https连接器 1.Tomcat结构体系如下图 2.配置https连接器 1.生成密钥库是用 keytool 工具,java JDK 内置了keytool工具,如果安装了java jdk环境,就可以直接在 cmd 使用keytool。 2.用 ...
  • tomcat结构简介

    2013-05-02 16:56:08
    一、Tomcat 背景 自从JSP发布之后,推出了各式各样的JSP引擎。Apache Group在完成GNUJSP1.0的开发以后,开始考虑在SUN的JSWDK基础上开发一个可以直接提供Web服务的JSP服务器,当然同时也支持 Servlet,这样...
  • 1. Tomcat结构 Tomcat是一个基于组件的服务器,它的构成组件都是可配置的,其中最外层的组件是Catalina Servlet容器,其他的组件按照一定的格式要求配置在这个顶层容器中。Tomcat的各个组件是在\conf\server.xml...
  • tomcat结构图详细

    2019-03-12 10:55:07
    转载:https://blog.csdn.net/xlgen157387/article/details/79006434
  • tomcat结构目录web应用及虚拟目录的映射web应用程序称为web应用 采用目录进行组织,该目录即为web应用所在目录 Web应用所在目录交给web服务器管理,这个过程称之为虚拟目录的映射。 在tomcat的conf中有个server....
  • Tomcat是一个基于组件形式的的Web容器,由Server(服务器)、Service(服务)、Connector(连接器)、Engine(引擎)、Host(主机)、Context(应用服务)组成,它们在server.xml里都有配置。 Tomcat的请求过程如图...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,517
精华内容 4,606
关键字:

tomcat结构