Tomcat学习小记(一)
1、Tomcat概述
Tomcat 服务器是一个开源的轻量级Web应用服务器,擅长处理动态资源,在中小型系统和并发量小的场合下被普遍使用,是开发和调试Servlet、JSP 程序的首选。
Tomcat服务器架构采用套娃式架构,每个功能的实现都是由各个组件环环相套。
Tomcat核心功能;HTTP服务器,进行Socket通信(TCP/IP),解析HTTP报文
Servlet容器,通过自带的Servlet和自定义的Servlet,处理具体的业务逻辑
Tomcat工作流程:页面通过Socket发送请求到HTTP服务器
HTTP服务器解析报文,对请求进行处理,通过适配器组件将request转成ServletRequest发送给Servlet服务器
Servlet服务器找到对应的Servlet处理请求,并将结果ServletResponse返回给HTTP服务器
HTTP将返回信息进行处理,将ServletResponse转成Response通过Socket返回给页面
页面收到返回信息进行展示
2、Tomacat架构
为了实现功能很行很多封装设计,封装了很多组件,组件与组件之间的关系构成了Tomcat的架构

<?xml version='1.0' encoding='utf-8'?><Server port="8005" shutdown="SHUTDOWN">--对应server组件
<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>
<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"> -- 对应service组件
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> --对应COnnector组件 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> --对应Connector组件,监听不同端口 <Engine name="Catalina" defaultHost="localhost"> --对应Engine组件,默认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"> --对应Host组件,虚拟主机,访问地址的虚拟域名,
appBase应用基础路径,webapps下的一个文件夹就是一个context
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" /> </Host>
</Engine>
</Service>
</Server>
server组件:一个server代表一个tomcat的实例,又因为Tomcat的核心是Servlet容器(Catalina),也称server 组件为Catalina实例,一个server有多个service组件,但默认使用一个
service组件:用来对外提供服务的,包含多个Connector组件(监听不同端口的请求和解析请求)和一个Servlet容器(进行业务处理)
Connector组件:用来实现http服务功能,又名Coyote
Container组件:用来实现Servlet容器功能,又名Catalina
Coyote组件:连接器组件,包含EndPoint子组件、Processor子组件、Adapter 子组件,EndPoint子组件+Processor子组件整理组合成ProtocolHandler组件
EndPoint子组件:进行Socket通信,处理TCP/IP协议,支持BIO、NIO、NIO2、APR网络IO模型,可以进行配置,Tomcat8之前默认为BIO,Tomcat8之后默认NIO
Processor子组件:进行HTTP报文解析,处理HTTP协议
Adapter 子组件:适配器,将Request对象封装成ServletRequest对象,将ServletResponse对象封装成Response对象
Engine组件:Engine组件(引擎)是Servlet容器Container组件的核心结构,支持在其中定义多个虚拟机(HOST),虚拟机允许Tomcat引擎在配置一台机器上的多个域名
Host组件:虚拟机,虚拟机允许Tomcat引擎在配置一台机器上的多个域名并且互不干扰
Context组件:每个虚拟机支持多个web应用的部署,就是我们常用的上下文对象
wrapper组件:上下文中可以部署多个Servlet,并且每一个Servlet都会被包装组件所包含
3、套娃式架构的好处
组件之间关系清晰,便于管理组件的生命周期
架构设计的组件与配置文件server.xml标签一一对应,便于解读
便于子容器继承父容器的一些配置
灵活配置组件
4、Tomcat实例构建
1、从官网下载源代码的压缩包,在本地进行解压,导入idea
2、进入src目录,创建一个pom.xml文件,便于管理

3、在项目目录中创建source文件夹,将conf、webapps目录移动到source文件夹下
4、给tomcat的源码启动类Bootstrap配置运行参数


5、启动BootStrap类的main函数
Tomcat学习小记(一)的更多相关文章
- Tomcat学习小记(二)
1.Tomcat源码入口 生命周期统一管理接口:LifeCycle 实现LifeCycle接口的类:(idea快捷键:Ctrl+h) 多个组件共同实现LifeCycle接口 Tomcat启动入口分析: ...
- mongodb入门学习小记
Mongodb 简单入门(个人学习小记) 1.安装并注册成服务:(示例) E:\DevTools\mongodb3.2.6\bin>mongod.exe --bind_ip 127.0.0.1 ...
- javascript学习小记(一)
大四了,课少了许多,突然之间就不知道学什么啦.整天在宿舍混着日子,很想学习就是感觉没有一点头绪,昨天看了电影激战.这种纠结的情绪让我都有点喘不上气啦!一点要找点事情干了,所以决定找个东西开始学习.那就 ...
- Tomcat学习—Tomcat的简介和目录以及配置文件介绍(Windows环境)
tomcat学习(8) 版权声明:本文为博主原创文章,未经博主允许不得转载. 今天学习TOMCAT,主要学习的是Tomcat的目录结构,配置文件! 1:Tomcat简介 Tomcat 服务器是一个免费 ...
- js 正则学习小记之匹配字符串
原文:js 正则学习小记之匹配字符串 今天看了第5章几个例子,有点收获,记录下来当作回顾也当作分享. 关于匹配字符串问题,有很多种类型,今天讨论 js 代码里的字符串匹配.(因为我想学完之后写个语法高 ...
- js 正则学习小记之左最长规则
原文:js 正则学习小记之左最长规则 昨天我在判断正则引擎用到的方法是用 /nfa|nfa not/ 去匹配 "nfa not",得到的结果是 'nfa'.其实我们的本意是想得到整 ...
- js 正则学习小记之NFA引擎
原文:js 正则学习小记之NFA引擎 之前一直认为自己正则还不错,在看 次碳酸钴,Barret Lee 等大神都把正则玩的出神入化后发现我只是个战五渣. 求抱大腿,求大神调教. 之前大致有个印象,正 ...
- js 正则学习小记之匹配字符串优化篇
原文:js 正则学习小记之匹配字符串优化篇 昨天在<js 正则学习小记之匹配字符串>谈到 个字符,除了第一个 个,只有 个转义( 个字符),所以 次,只有 次成功.这 次匹配失败,需要回溯 ...
- CSS学习小记
搜狗主页页面CSS学习小记 1.边框的处理 要形成上图所示的布局效果,即,点选后,导航下面的边框不显示而其他的边框形成平滑的形状.相对于把导航的下面边框取消然后用空白覆盖掉下面搜索栏的边框比较而言 ...
随机推荐
- MapReduce 的 shuffle 过程中经历了几次 sort ?
shuffle 是从map产生输出到reduce的消化输入的整个过程. 排序贯穿于Map任务和Reduce任务,是MapReduce非常重要的一环,排序操作属于MapReduce计算框架的默认行为,不 ...
- Sign in with Apple 流程总结
流程图 相关说明 UserId 与用户的 Apple Id 一一对应.在同一个开发帐号下的所有 app 里,获取到的值都一样. IdentityToken identityToken 是一个 Json ...
- day41:MYSQL:select查询练习题
目录 1.表结构 2.创建表和插入数据 3.习题 1.表结构 2.建表和插入数据 # 创建班级表 create table class( cid int primary key auto_increm ...
- 微信小程序授权登录--PHP后端接口
由于之前做过公众号的一个开发,所以再开发小程序就没有那么多坑了,在这也记录一下开发过程,以方便后续进行参考. 废话不多说,直接上官方文档,任何使用第三方开发的,不看文档就是耍流氓.小程序开发文档,可以 ...
- 官网安装Python包太慢?教你三种下载安装方式-PiP、conda、轮子,教你三种Pytorch的下载安装方式,保证你再也不用出现Error
上一期我们介绍了CUDA下载安装以及其总结,这一期教大家如何在Anaconda中使用CUDA来进行加速.神经网络依赖cuDNN的下载安装,以及下载和安装Pytorch-GPU安装包的三种方式(cond ...
- Dubbo系列之 (六)服务订阅(3)
辅助链接 Dubbo系列之 (一)SPI扩展 Dubbo系列之 (二)Registry注册中心-注册(1) Dubbo系列之 (三)Registry注册中心-注册(2) Dubbo系列之 (四)服务订 ...
- Zabbix Agent报“listener failed: zbx_tcp_listen() fatal error: unable to serve on any address”
一台服务器的Zabbix Agent升级后,在Zabbix Server发现Zabbix Agent无法访问.检查Zabbix Agent发现服务停止了,启动Zabbix Agent后,发现服务马上又 ...
- 字符串对象跟xml格式的转换
package com.sunshen.jfids.testWebService.task; import java.io.File; import java.io.StringWriter; imp ...
- 原生JDK网络编程- NIO
什么是NIO? NIO 库是在 JDK 1.4 中引入的.NIO 弥补了原来的 I/O 的不足,它在标准 Java 代码中提供了高速的.面向块的 I/O.NIO翻译成 no-blocking io 或 ...
- yum wget rpm
wget 类似于迅雷,是一种下载工具 下载安装包 yum: 是redhat, centos 系统下的软件安装方式 下载安装包并自动安装 以及一些依赖关系 基于RPM包管理,能够从指定 ...