tomcat学习1

tomcat 简介

tomcat 是一个容器,可以用来调用servlet,jsp等。
jsp等格式会被tomcat编译成servlet再运行调用。

tomcat 架构

<?xml version='1.0' encoding='utf-8'?>
<Server>
  <Service>
    <Connector/>
    <Engine>
      <Host>
      
      </Host>
    </Engine>
  </Service>
</Server>

Server

  • 一个server就相当于一个tomcat
<Server port="8005" shutdown="SHUTDOWN"></Server>

Service

一个server里面可以有多个service。

<Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost"></Engine>
 </Service>

Connector

Connector属于service内部,一个Connector与一个tcp端口绑定,监听用来接收用户的请求等。通常情况下监听两个基本的端口,一个是http协议的端口,用来做web服务;一个是AJP 连接Apache处理静态太文件。

<!--
port:属性指定监听端口,默认8080端口,可修改为1024-65535间的任意一个端口
protocol:支持协议
connectionTimeout:定义连接器等待时间,默认20秒
redirectPort:SSL请求会重定向到8443端口
-->
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

容器 Container

  • 包括Engine、Host、Context、Cluster

Engine

Engine中可以包含一个或者多个Host,可以配置默认主机。Engine容器会从HTTP Connector接收HTTP请求,并且会根据主机名/IP地址交由相应的主机处理请求。

<Engine name="Catalina" defaultHost="localhost"></Engine>

Host

一个Host元素代表了一个虚拟主机,默认主机名为localhost,支持多个Context。

<!--
appBase:定义了应用程序的根目录,默认是webapps
unpackWARS:定义了是否解压webapps中的WAR文件,如果指定为“false”,会从WAR文件直接运行程序,执行较慢
autoDeploy:把应用程序直接拖到webapps目录下,是否自动运行
-->
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"></Host>

Context

Host元素定义了虚拟主机,Context则是虚拟主机下的具体应用。

<!--
path:访问项目时的URL,加在localhost:8080后
docBase:path对应的项目目录
reloadable:监视 /WEB-INF/classes/ 和 /WEB-INF/lib目录中的类文件,更改后自动重载应用程序,
生成环境不建议使用,默认为“false”
-->
<Context path="" docBase="webapps/examples" reloadable="false"/>

各个板块name 的作用

  • service : 就是这个服务的名字。
  • Engine:引擎的名字与service相同。指定service中的请求处理机,接收和处理来自Connector的请求.
  • host: name 与 Engine 的defaultHost 相同.指定主机名 .

结构图

image

开始学习

  • 一个server至少包含一个service,Service 是对外提供服务的
  • connector 和 container处于一个等级
  • 一个service可以有多个connector,处理http,hhtps等
  • 只有一个container
  • Connector用于接受请求并将请求封装成Request和Response来具体处理
  • Container用于封装和管理Servlet,以及具体处理request请求

请求过程

  • 一个service由connector 和 container 组成。(主要的其他增强功能先不管)
    image

主要的是connector 和 container

connector 是对tcp请求的封装,container模块则是对请求流程的封装,这里的封装是指如何将某一个请求分发给指定的servlet处理。

Connector分析

image

  • Connector就是使用ProtocolHandler来处理请求的,不同的ProtocolHandler代表不同的连接类型,比如:Http11Protocol使用的是普通Socket来连接的,Http11NioProtocol使用的是NioSocket来连接的。
  1. 其中ProtocolHandler由包含了三个部件:Endpoint、Processor、Adapter。

  2. Endpoint用来处理底层Socket的网络连接,Processor用于将Endpoint接收到的Socket封装成Request。

  3. Endpoint由于是处理底层的Socket网络连接,因此Endpoint是用来实现TCP/IP协议的,而Processor用来实现HTTP协议的。

  4. Adapter将请求适配到Servlet容器进行具体的处理。

  • 总的来说就是connector 接收前端的http请求,先接收到的是tcp请求需要自己打包成http请求,再丢给servlet容器去进一步处理。
endpoint (处理tcp请求)
  • 虽然接收到的是tcp仔细看就是把http请求一行一行的发送过来了,只要我们能够把这些数据解析出来就能够打包成http数据包(request)。
Processor(处理http请求,我也没搞清楚)
  • 这里把http请求发送给adapetr 处理。

Container分析(假设已经成功获取到connector模块的包装请求信息)

  • Container用于封装和管理Servlet,以及具体处理Request请求.
    image

  • 4个子容器的作用分别是:

(1) Engine:引擎,用来管理多个站点,一个Service最多只能有一个Engine;

(2) Host:代表一个站点,也可以叫虚拟主机,通过配置Host就可以添加站点;

(3)Context:代表一个应用程序,对应着平时开发的一套程序,或者一个WEB-INF目录以及下面的web.xml文件;

(4)Wrapper:每一Wrapper封装着一个Servlet;

image

image

  • 这里重新定义四个子容器的作用。
  1. engine: 还是引擎,把用户的请求分发给host,host的name 就相当于一个key。
  2. host: 放项目的,把配置文件中的项目加载到这个模块。即把context(具体的项目)加载到这个模块。把请求分发到具体的context;(可以有多个)
  3. context:某个具体的web后台程序。其实这个板块主要由servlet组成,也是servlet的容器。把请求分发到具体的(servlet);
  4. wrapper: context的子模块,即一个servlet,它会根据项目里面web.xml配置中设置的servlet的配置去加载指定的servlet并保存下来,
container 加载(责任链模式)

image

Engine—Host—Context----Wrapper

image

主要涉及到的就是host和wrapper 这个两个模块。

  • 部分图片来自于其他博主,时间久了也没找到原帖了。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值