tomcat是我们经常使用的组件,但是内部是如何运行的呢,我们去一探究竟。

1、tomcat架构

  tomcat的整体架构图如下:

Tomcat中只有一个Server,一个Server可以有多个Service,一个Service可以有多个Connector和一个Container;Server掌管着整个Tomcat的生死大权;Service 是对外提供服务的;Connector用于接受请求并将请求封装成Request和Response来具体处理;Container用于封装和管理Servlet,以及具体处理request请求;

  connector架构:

  container架构:

  整体关系图:

2、tomcat启动过程

  首先tomcat启动是从startup.sh或者startup.bat脚本启动,实际是去执行catalina.sh脚本,如下图所示:

catalina.sh中再执行bootstrap的main方法

catalina通过调用lifecycleBase的initInternal方法启动server、service、container,依次启动

而host、context是继承container,container通过启动child方法来启动这些组件

server.xml文件里Host节点默认是没有值的,所以也就取不到子元素了,那么上下文是怎么执行的呢?

通过设置状态,hostConfig监听到,调用deployDirectories方法。由于context是null,通过反射创建context,

之后调用context.startInternal获取web.xml,读取web.xml中的loadOnStartup加载servlet,执行servlet的init()

3、tomcat请求过程

整个请求传递是通过管道链来实现的,请求调用的方法如下图

整个tomcat的启动和请求接收的源码分析完毕,欢迎大家在评论区交流讨论。

Tomcat启动和请求处理解析的更多相关文章

  1. Tomcat架构解析(二)-----Connector、Tomcat启动过程以及Server的创建过程

    Connector用于跟客户端建立连接,获取客户端的Socket,交由Container处理.需要解决的问题有监听.协议以及处理器映射等等. 一.Connector设计   Connector要实现的 ...

  2. tomcat启动(Ⅶ)请求处理--Processor.process(SocketWrapper<S> socketWrapper)

    tomcat启动(六)Catalina分析-StandardServer.start() 上一篇分析到:Http11NioProcessor.process(SocketWrapper<S> ...

  3. Tomcat源码分析三:Tomcat启动加载过程(一)的源码解析

    Tomcat启动加载过程(一)的源码解析 今天,我将分享用源码的方式讲解Tomcat启动的加载过程,关于Tomcat的架构请参阅<Tomcat源码分析二:先看看Tomcat的整体架构>一文 ...

  4. 在tomcat启动时解析xml文件,获取特定标签的属性值,并将属性值设置到静态变量里

    这里以解析hibernate.cfg.xml数据库配置信息为例,运用dom4j的解析方式来解析xml文件. 1.在javaWeb工程里新建一个java类,命名为GetXmlValue.java,为xm ...

  5. 探秘Tomcat——启动篇

    tomcat作为一款web服务器本身很复杂,代码量也很大,但是模块化很强,最核心的模块还是连接器Connector和容器Container.具体请看下图: 从图中可以看出 a. 高亮的两块是Conne ...

  6. Tomcat笔记:Tomcat的执行流程解析

    Bootstrap的启动 Bootstrap的main方法先new了一个自己的对象(Bootstrap),然后用该对象主要执行了四个方法: init(); setAwait(true); load(a ...

  7. How Tomcat works — 五、tomcat启动(4)

    前面摆了三节的姿势,现在终于要看到最终tomcat监听端口,接收请求了. 目录 Connector Http11Protocol JIoEndpoint 总结 在前面的初始化都完成之后,进行Conne ...

  8. How Tomcat works — 四、tomcat启动(3)

    上一节说到StandardService负责启动其子组件:container和connector,不过注意,是有先后顺序的,先启动container,再启动connector,这一节先来看看conta ...

  9. Tomcat启动过程源码解读

    根据Tomcat源码来看一下Tomcat启动过程都做了什么 部分代码为主要流程代码,删去了try-catch以及一些校验逻辑,方便理解主流程 先来一张启动过程时序图,了解一下启动顺序 Tomcat启动 ...

随机推荐

  1. 从值栈获取List集合

    -------------------siwuxie095 从值栈获取 List 集合 1.具体步骤 (1)在 Action 中向值栈放 List 集合 (2)在 JSP 页面中从值栈获取 List ...

  2. tomcat限制ip访问

    context元素添加 <Context> <Valve className="org.apache.catalina.valves.RemoteAddrValve&quo ...

  3. memcached的常用命令

    memcached 常用命令及使用说明   1.启动Memcache 常用参数 -p <num> 设置TCP端口号(默认设置为: 11211) -U <num> UDP监听端口 ...

  4. Spring Boot 集成servlet,发布为可直接运行的war包,方便后续打包为docker镜像。

    背景:Spring Boot 集成servlet,发布为可直接运行的war包,方便后续打包为docker镜像. 原文地址 https://github.com/weibaohui/springboot ...

  5. Python 中的POST/GET包构建以及随机字符串的生成-乾颐堂

    现在,我们来用Python,创建GET包和POST包. 至于有什么用处,大家慢慢体会. Python 中包含了大量的库,作为一门新兴的语言,Python 对HTTP有足够强大的支持. 现在,我们引入新 ...

  6. zip多个分割文件合并

    copy /b 1.z01+1.z02+1.zip 注意:1.zip在最后

  7. oepnni安装

    sudo apt-get install libopenni-dev libopenni2-dev / apt-get install libqhull-dev

  8. ASP.NET WEBAPI设计(文摘)

    HTML5和移动应用推动WEB API的发展 第1部分 基础知识 第1章 因特网,万维网和HTTP协议 1.1 WEB体系结构 资源,URI(统一资源标识符)和表示 URI分为两种类型:URL(统一资 ...

  9. 用JQ去实现一个轮播效果

    前提:用JQ去实现轮播效果一步步的做一个梳理. 首先肯定是轮播的HTML和CSS样式了: <body> <div class="pic"> <div ...

  10. csdn的blog可以直接导入内含图片的word文档吗?

    目前大部分的博客作者在用Word写博客这件事情上都会遇到以下3个痛点: 1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.使用Word写 ...