精华内容
下载资源
问答
  • 首先,我们要知道Tomcat是什么,先看一下官网介绍: The Apache Tomcat® software is an open source implementation of the Java Servlet, JavaServer Pages, Java Expression Language and Java WebSocket ...

    首先,我们要知道Tomcat是什么,先看一下官网介绍:
    The Apache Tomcat® software is an open source implementation of the Java Servlet, JavaServer Pages, Java Expression Language and Java WebSocket technologies.
    翻译:Apache Tomcat软件是Java Servlet、JavaServer Pages、Java表达式语言和Java WebSocket技术的开源实现。

    那么说Tomcat是Servlet容器,tomcat能够接收并且处理http请求,所以tomcat也是一个http服务器。
    所以它的体系结构是这样的
    在这里插入图片描述

    可以看到HTTP 服务器接收到请求之后把请求交给Servlet容器来处理,Servlet 容器通过Servlet接⼝调⽤业务类。Servlet接⼝和Servlet容器这⼀整套内容叫作Servlet规范。
    所以,Tomcat的两个重要身份
    1)http服务器
    2)Tomcat是一个Servlet容器

    tomcat的主要功能:
    1)和客户端浏览器进行交互,进行socket通信,将字节流和Request/Response等对象进行转换。
    2)Servlet容器处理业务逻辑。

    Tomcat 设计了两个核⼼组件连接器(Connector) 和容器(Container) 来完成 Tomcat 的两⼤功能。
    连接器,负责对外交流: 处理Socket连接,负责⽹络字节流与Request和Response对象的转化;
    容器,负责内部处理: 加载和管理Servlet,以及具体处理Request请求,如图:
    在这里插入图片描述
    Tomcat 连接器组件是: Coyote,Tomcat Servlet 容器是 Catalina。从tomcat的conf/server.xml可以看到他们的作用与地位。
    在这里插入图片描述

    文章总结来源:拉勾教育Java高薪训练营

    展开全文
  • 简述Tomcat体系结构

    2021-05-23 18:24:52
    简述Tomcat体系结构Tomcat请求处理流程Tomcat核心组件Coyote 连接器Catalina 容器 Tomcat请求处理流程 流程大致说明: 用户请求至Tomcat服务器,Tomcat将其封装为ServletRequest对象。 Servlet容器初始化时会初始...

    Tomcat请求处理流程

    在这里插入图片描述
    流程大致说明:

    1. 用户请求至Tomcat服务器,Tomcat将其封装为ServletRequest对象。
    2. Servlet容器初始化时会初始化部署在tomcat下业务类,放入Servlet容器中(用户请求前,tomcat启动时)。
    3. 第1步执行完后会使用ServletRequest对象中的信息(url,请求方式)等去Servlet容器中寻找对应的Servlet。
    4. 如果Servlet还没有被加载,就⽤反射机制创建这个Servlet,并调⽤Servlet的init⽅法来完成初始化。
    5. 调用Servlet的service方法处理请求。
    6. 将请求结果封装为ServletResponse,并返回给http服务器。
    7. HTTP服务器会把响应发送给客户端。

    Tomcat核心组件

    Tomcat拥有两个核心组件:连接器(Connector)容器(Container)

    组件说明
    连接器负责对外交流: 处理Socket连接,负责⽹络字节流与Request和Response对象的转化;
    容器加载和管理Servlet,以及具体处理Request请求;

    Coyote 连接器

    Coyote 负责将客户端发送过来的Socket请求封装为ServletRequest与将Container处理结果封装ServletResponse对象。大体流程如下图:
    在这里插入图片描述

    组件作⽤描述
    EndPointEndPoint 是 Coyote 通信端点,即通信监听的接⼝,是具体Socket接收和发送处理器,是对传输层的抽象,因此EndPoint⽤来实现TCP/IP协议的
    ProcessorProcessor 是Coyote 协议处理接⼝ ,如果说EndPoint是⽤来实现TCP/IP协议的,那么Processor⽤来实现HTTP协议,Processor接收来⾃EndPoint的Socket,读取字节流解析成Tomcat Request和Response对象,并通过Adapter将其提交到容器处理,Processor是对应⽤层协议的抽象
    ProtocolHandlerCoyote 协议接⼝, 通过Endpoint 和 Processor , 实现针对具体协议的处理能⼒。Tomcat 按照协议和I/O 提供了6个实现类 : AjpNioProtocol ,AjpAprProtocol, AjpNio2Protocol , Http11NioProtocol ,Http11Nio2Protocol ,Http11AprProtocol
    Adapter由于协议不同,客户端发过来的请求信息也不尽相同,Tomcat定义了⾃⼰的Request类来封装这些请求信息。ProtocolHandler接⼝负责解析请求并⽣成Tomcat Request类。但是这个Request对象不是标准的ServletRequest,不能⽤Tomcat Request作为参数来调⽤容器。Tomcat设计者的解决⽅案是引⼊CoyoteAdapter,这是适配器模式的经典运⽤,连接器调⽤CoyoteAdapter的Sevice⽅法,传⼊的是Tomcat Request对象,CoyoteAdapter负责将Tomcat Request转成ServletRequest,再调⽤容器

    Catalina 容器

    1. Tomcat是一个由一系列可配置(conf/server.xml)组件组成的Web容器,Catalina就是Tomcat的Servlet容器。
    2. 因为Catalina是Tomcat的核心,所以可以简单理解为Tomcat就是一款Servlet容器,比如 Coyote 模块提供链接通信,Jasper 模块提供 JSP 引擎,Naming 提供JNDI 服务,Juli 提供⽇志服务等都是由Catalina提供支撑的。
      在这里插入图片描述
      其中Catalina与其它实例的关系为:
      在这里插入图片描述
    实例用途
    Catalina负责解析Tomcat的配置⽂件(server.xml) , 以此来创建服务器Server组件并进⾏管理
    Server服务器表示整个Catalina Servlet容器以及其它组件,负责组装并启动Servlaet引擎,Tomcat连接器。Server通过实现Lifecycle接⼝,提供了⼀种优雅的启动和关闭整个系统的⽅式
    Service服务是Server内部的组件,⼀个Server包含多个Service。它将若⼲个Connector组件绑定到⼀个Container
    Container容器,负责处理⽤户的servlet请求,并返回对象给web⽤户的模块

    Container 组件具体结构

    实例用途
    Engine表示整个Catalina的Servlet引擎,⽤来管理多个虚拟站点,⼀个Service最多只能有⼀个Engine,但是⼀个引擎可包含多个Host
    Host代表⼀个虚拟主机,或者说⼀个站点,可以给Tomcat配置多个虚拟主机地址,⽽⼀个虚拟主机下可包含多个Context
    Context表示⼀个Web应⽤程序, ⼀个Web应⽤可包含多个Wrapper
    Wrapper表示⼀个Servlet,Wrapper 作为容器中的最底层,不能包含⼦容器
    展开全文
  • Tomcat体系结构

    2021-01-28 11:35:07
    Tomcat访问服务器过程 1.用户发起请求给浏览器 2.浏览器发起TCP连接请求 3.服务器(Tomcat)接收请求并建立连接 4.浏览器生成HTTP格式的数据包 5.浏览器发送请求数据包给服务器 6.服务器解析HTTP格式数据包 7.服务器...

    Tomcat访问服务器过程

    1.用户发起请求给浏览器
    2.浏览器发起TCP连接请求
    3.服务器(Tomcat)接收请求并建立连接
    4.浏览器生成HTTP格式的数据包
    5.浏览器发送请求数据包给服务器
    6.服务器解析HTTP格式数据包
    7.服务器执行请求,并生成HTTP格式的数据包,然后发送响应数据包给浏览器
    8.浏览器解析HTTP格式的数据包,然后呈现静态数据给用户
    

    Tomcat请求处理大致过程

    在这里插入图片描述

    浏览器发送某个http请求,Http服务器接收这个请求之后,把请求教给Servlet容器来处理,Servlet容器通过调用Servlet接口调用业务
    

    Servlet接口和Servlet容器这一整套的内容叫做Servlet规范
    Tomcat既按照Servlet规范的要求去实现了Servlet容器,同时它也具有HTTP服务器的功能。

    Tomcat的两个重要身份

    1.http服务器
    2.Tomcat是⼀个Servlet容器

    Tomcat Servlet容器处理流程

    在这里插入图片描述

    当用户请求某个URL资源时
    1)HTTP服务器会把请求信息使⽤ServletRequest对象封装起来
    2)进⼀步去调⽤Servlet容器中某个具体的Servlet
    3)在 2)中,Servlet容器拿到请求后,根据URL和Servlet的映射关系,找到相应的Servlet
    4)如果Servlet还没有被加载,就⽤反射机制创建这个Servlet,并调⽤Servlet的init⽅法来完成初始化
    5)接着调⽤这个具体Servlet的service⽅法来处理请求,请求处理结果使⽤ServletResponse对象封装
    6)把ServletResponse对象返回给HTTP服务器,HTTP服务器会把响应发送给客户端

    Tomcat系统总体架构

    tomcat有两个⾮常重要的功能需要完成
    1.和客户端浏览器进⾏交互,进⾏socket通信,将字节流和Request/Response等对象进⾏转换
    2.Servlet容器处理业务逻辑
    连接器(Connector):负责对外交流,处理Socket连接,负责⽹络字节流与Request和Response对象的转化
    容器(Container):负责内部处理,加载和管理Servlet,以及具体处理Request请求
    在这里插入图片描述

    展开全文
  • 前言 今天小编新开一个tomcat的分享章节,主要是最近需要布置一下环境,然后项目基本都是tomcat作为web容器,还记得小编刚刚开始接触tomcat的时候版本还是7现在都到10了,官网都不推荐7...Tomcat架构体系 架构说明 Tomc

    前言

    今天小编新开一个tomcat的分享章节,主要是最近需要布置一下环境,然后项目基本都是tomcat作为web容器,还记得小编刚刚开始接触tomcat的时候版本还是7现在都到10了,官网都不推荐7了,其线程模型也从bio到nio了。
    当然tomcat小编不会深入讲解,大致会讲解tomcate的架构体系,生产环境如何搭建使用,http请求处理流程(一个请求如何到达咱们的项目中的servlet),还有就是io的网络通信模型。
    好了介绍完大致要分享的内容,咱们进入正题。

    Tomcat架构体系

    架构说明

    Tomcat是⼀个基于JAVA的WEB容器,其实现了JAVA EE中的 Servlet 与 jsp 规范,与Nginx apache 服务器不同在于⼀般⽤于动态请求处理(这边说明其支持html,以及动态请求和页面渲染,早期服务器一般是不支持动态请求的,只支持html,这在早期是比较牛的)。在架构设计上采⽤⾯向组件的⽅式设计。即整体功能是通过组件的⽅式拼装完成。另外每个组件都可以被替换以保证灵活性。
    上面说了tomcat是面向组件设计的,也就是可以像积木一样拼接,那小编带大家看下tomcat的架构图。

    架构图

    在这里插入图片描述
    看来上面的架构图,是不是不太明白,那下面小编讲一下各个组件的作用

    各个组件以及关系

    1. Server:顶级模块,一个tomcat进程只有一个Server,有个端口用于关闭。理解为服务器
    2. Service:一个Server可以有多个Service,可以理解为服务,有多个,但是请求无法直接到达服务,就需要下面的Connector组件了。
    3. Connector:通过连接器我们就可以请求到我们的服务,连接器的话有不同的协议,如http,jk2等,连接器有两个属性一个是协议,一个是端口号。
    4. Engine:引擎组件,当连接进来后到达服务,那有引擎来处理请求
    5. Host:引擎里面包含多个站点。他主要是基于域名来分发请求。
    6. Context:站点又可包含多个Context,context对应到多个servlet。这里Context可以理解为应用,这里主要为隔离各个WEB应用,然后每个Context的ClassLoader都是独立。

    到这儿各个组件的作用和关系就差不多了,希望大家能够理解。当然还可以划分为顶层组件(Server和Service),连接器组件(Connector),容器组件(Engine,Host,Context),其他组件(日志等,这里不表)。小编画了一张简易图希望加深大家印象:
    在这里插入图片描述
    接下来根据上面组件的理解,继续看下server.xml的配置:

    详解sever.xml配置

    小编贴上配置:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <Server port="8005" shutdown="SHUTDOWN" >
      <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
      
      <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
      <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
      <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
      <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
    
      <GlobalNamingResources>
         <!-- 用户名密码,配置中tomcat-user.xml-->
        <Resource name="UserDatabase" auth="Container"
                  type="org.apache.catalina.UserDatabase"
                  description="User database that can be updated and saved"
                  factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
                  pathname="conf/tomcat-users.xml" />
      </GlobalNamingResources>
      <!-- 服务  可以有多个-->
      <Service name="Catalina">
      	<!-- 可以有多个连接,一般情况下不会配置多个连接器,现在都用ngnix了-->
        <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />
         <!-- 协议处理器,7.0版本默认bio,8.0默认nio,9.0没有bio了 -->
         <Connector port="8082" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />
         <!-- 引擎,默认host 为localhost ,如果域名你写为127.0.0.1则匹配到默认的,因为Host 中的name都匹配不到-->
        <Engine name="Catalina" defaultHost="localhost">
    
          
          <Realm className="org.apache.catalina.realm.LockOutRealm">
            
            <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
                   resourceName="UserDatabase"/>
          </Realm>
    
          <Host name="localhost"  appBase="webapps"
                unpackWARs="true" autoDeploy="true">
             <!-- 阀门 这里陪着了log日志打印-->
            <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                   prefix="localhost_access_log" suffix=".txt"
                   pattern="%h %l %u %t &quot;%r&quot; %s %b" />
    
          </Host>
    		 <!-- 站点的根路径以及name,默认是webapps下面的,unpackWARS为默认是否解压war包,autoDeploy为自动发布 -->
    		  <!-- 这里要访问www.lecture.com则需要配置host文件 -->
           <Host name="www.lecture.com"  appBase="/Users/lectrue/data/www"
                unpackWARs="true" autoDeploy="true">
                 <!-- 直接配置他的项目docBase,这样就可以访问其所有的内容,path不需要斜杆 -->
                 <!-- 这个配置可以做engine的host下面配置xxx.xml,xxx可以作为名字路径 ,大家记住这个后续很有用-->
                <Context path="tomcat" docBase="/Users/lectrue/temp/tomcat-10.0.8">
     
                </Context>
          </Host>
    
          
        </Engine>
      </Service>
    
      <Service name="Catalina2">
        <Connector port="8083" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />
        
                   
        <Engine name="Catalina2" defaultHost="localhost">
          <Realm className="org.apache.catalina.realm.LockOutRealm">
            
            <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
                   resourceName="UserDatabase"/>
          </Realm>
    
          <Host name="localhost"  appBase="webapps"
                unpackWARs="true" autoDeploy="true">
            <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                   prefix="localhost_access_log" suffix=".txt"
                   pattern="%h %l %u %t &quot;%r&quot; %s %b" />
    
          </Host>
        </Engine>
      </Service>
    </Server>
    
    

    上面文字比较多,那希望看到博客的小伙伴可以耐心看完。接下来我们聚焦一下connector的配置;

    <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   maxThreads="5"
                   minSpareThreads="2" 
                   maxConnectors = "10"
                   acceptCount = "5"
                   />
    

    小编重点解释一下这些配置,一般情况下我们不需要去修改他:

    • port: 指定服务器端要创建的端口号
    • protocol: 监听的协议,默认是http/1.1
    • connectionTimeout:这里的超时时间是网络读写的时间
    • maxThreads:最大线程数量
    • minSpareThreads:启动的时候请求业务的线程
    • maxConnectors :当请求大于线程数量的时候,会放入队列,连接依然可以进来,但是连接最大连接数为10
    • acceptCount :当到达最大连接数的时候可以接受等待的数量

    当然还可以把线程池配置单独拿出来,connector里面进行引用

    <Executor name="myExecutor" maxThreads="5" minSpareThreads="2" />
    <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   executor ="myExecutor"
                   maxConnectors = "10"
                   acceptCount = "5"
                   />
    

    当然要理解全部最好去看官网或者看配置的注释。

    总结

    今天主要是分享了tomcat的整体的结构体系已经核心配置。还是比较简单的,大家可以在自己的环境上操作配置,来一一证明上述的理论。或许小编讲错了呢!

    展开全文
  • Tomcat类加载器体系结构 设计前思考 Tomcat类加载要考虑几个问题: 假如Tomcat有两个项目,两个项目中有同名的Servlet,功能是不同的,Tomcat需要将两个同名的Servlet都加载并且进行管理,还要保证不能冲突,相互是...
  • Tomcat内部结构解析

    2021-05-10 05:19:58
    Tomcat的组织结构Tomcat是一个基于组件的服务器,它的构成组件都是可配置的,其中最外层的是Catalina servlet容器,其他组件按照一定的格式要求配置在这个顶层容器中。Tomcat的各种组件都是在Tomcat安...
  • Tomcat体系结构结构概念如下: Server Engine Host Connector Context Wrapper 找到Tomcat安装路径下的Server.xml看到tomcat中的内部结构(去掉杂余注释更清晰,如下代码) Tomcat类加载机制剖析 JVM的类加载...
  • java体系结构介绍

    2021-02-27 09:53:07
    1、JAVA体系结构说明java体系结构包括四个独立相关的技术:java程序设计语言、java class 文件格式、java应用编程接口、java虚拟机。当编写并运行一个java程序时,就同时使用了这四种技术。用java编写源代码,把它...
  • Tomcat 的类加载机制

    2021-10-16 19:14:38
    Tomcat 实际上只有WebAppClassLoader 加载器中打破了双亲委派,其他类加载器还是遵循双亲委派的。 这样做最主要原因是保证同个 Web 容器中的不同 Web 应用程序所使用的类库相互独立,避免相互影响
  • 软件体系结构汇总
  • Servlet体系结构

    2021-03-27 11:11:41
    Servlet体系结构 一, Servlet 接口(祖籍) 1,GenericSrevlet 是一个抽象类(实现了)Servlet接口(儿子) 2,HttpServlet 是一个抽象类(继承了)GenericSrevlet类(孙子) 二, GenericSrevlet (真正开发中并...
  • 摘要一直以来想看一下tomcat的源码,可以从头到尾理解一遍在整个web请求的处理过程中,容器完成的功能,容器怎么把一个url的请求的处理递交给了servlet,容器的pipeline是怎么设计的,容器的filter怎么实现的,如何...
  • 0. Web服务器 Web服务器一般指网站服务器,可以处理浏览器等Web客户端的请求并...目录结构 -- bin 可执行文件,其中包括tomcat启动文件与终止文件 --conf 配置文件,用于配置Tomcat相关信息, --server.xml --lib 依赖
  • Tomcat

    2021-01-16 22:40:34
      server标签为tomcat的根标签,它的一级子标签有:Listener,GlobalNamingResources,Service。   它有2个属性:   port:关闭服务器的监听端口   shutdown: 关闭服务器的指令字符串 1.1 Listener   可以配置...
  • Java Web的基础的体系结构是什么?到底是怎么运作的?这些高级的框架与基础的体系结构之间是什么关系? 只有真正理清了这些底层基础的结构,才能完全理解高级框架的设计原理,在使用框架开发项目时做到事半功倍。 ...
  • Servlet 体系结构

    2021-01-07 17:06:09
    Tomcat是服务器 端,浏览器是客户端,这是BS架构 http://localhost:8080是Tomcat的地址,后面是资源名称。 1. 当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径 2. 查找web.xml...
  • jvm体系结构

    2021-03-10 07:45:48
    JVM 位置jvm体系结构图类装载器ClassLoader负责加载class文件,class文件在文件开头有特定的文件标示,并且ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定类装载器ClassLoader...
  • tomcat服务器

    2021-01-16 19:56:21
    Tomcat体系架构 6.5. 虚拟目录映射方式 在server.xml文件的host元素中配置,例如: 在Tomcat6中,不再建议在server.xml文件中配置context元素,细节查看tomcat服务器关于context元素的说明。 让tomcat自动映射: ...
  • Tomcat每到凌晨会有一个高峰,峰值的并发达到了3000以上,最后的结果是Tomcat线程池满了,日志看很多请求超过了1s。 服务器性能很好,Tomcat版本是7.0.54,配置如下: <Executor name="tomcatThreadPool" name...
  • tomcat源码阅读

    2021-02-26 17:34:24
    tomcat的源码的时候,我建议和官方的User Guide一起阅读,明白tomcat做某件事情的目的之后,看源码会容易一点。另外,debug当然是一个非常重要的工具。源码上了规模之后,如果单纯静态地看,基本是看不出什么来的...
  • 体系结构实验报告

    2021-08-12 11:47:47
    体系结构实验报告》由会员分享,可在线阅读,更多相关《体系结构实验报告(28页珍藏版)》请在人人文库网上搜索。1、课程实验报告软件系统结构专业软件工程学生姓名刘辉班级软件151学号1510701117指导老师孙莉实验一...
  • Tomcat笔记

    2021-05-11 17:56:23
    目录主要课程内容第一部分 Tomcat系统架构及原理剖析第 1 节 ...Coyote3.1 Coyote简介3.2 Coyote 的内部组件及流程第 4 节 Tomcat Servlet 容器 Catalina4.1 Tomcat 模块分层结构图及Catalina位置4.2 Servlet 容器
  • tomcat

    2021-10-10 15:26:25
    架构设计优雅,灵活使用模板方法模式,层次结构清晰 2、架构图 HTTP 服务器 + Servlet 容器 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iqRquLB8-1633850780811)(.1627606761419.png...
  • Eclipse导入Tomcat源码

    2021-03-15 03:18:50
    想要研究下Tomcat体系结构或者源码,最好将Tomcat的源码导入到ide中,编写实例进行代码跟踪(debug)。这里参考了网上一些资料,将自己操作过程记个流水账。准备:1.Tomcat源码下载这个里下载tomcat-6.0.33源码。2....
  • Tomcat的简单介绍

    2021-05-24 09:26:05
    Tomcat是Apache软件基金会属下Jakarta项目开发的Servlet容器,提供了作为Web服务器的一些特有功能。由于Tomcat本身也内含了HTTP服务器,因此也可以视作单独的Web服务器。但是,不能将Tomcat和Apache HTTP服务器混淆...
  • Linux Tomcat错误

    2021-05-11 00:59:24
    zeppelin..8更新我已从您的错误消息解码ELF标头: ^?ELF^A^A^A^B^C^A它是一组插入符号...) - ELFMAG00x45 (E) - ELFMAG10x4c (L) - ELFMAG20x46 (F) - ELFMAG3接下来的3个字节指定体系结构,字节顺序和ELF格式版本:0...
  • ​ B/S结构(Browser/Server,浏览器/服务器模式),是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 35,749
精华内容 14,299
关键字:

tomcat的结构体系