tomcat底层原理_浅入

本文将从4个方向讲述tomcat容器
一、tomcat中四大servlet容器
二、tomcat执行请求流程解析
三、tomcat与socket/tcp/http协议关系
四、tomcat io模型解析

Tomcat重要性:
web项目都需要tomcat,其作用用于连接用户和后台,图如下:
在这里插入图片描述

一、Tomcat中四大servlet容器
想必大家都知道Tomcat是servlet容器,其实Tomcat内部也存在容器
1、Engine–方便管理多个Host—List<Host>
2、Host—虚拟主机,存多个Context—List<Context>
3、Context—应用—List<Wrapper>
4、Wrapper–servlet容器–List<Servlet>

问题:为什么不是Context直接管理servlet,而是用Wrapper管理?

public class Test extends HttpServlet implements SingleThreadModel {
}

a、实现单线程model,则每个请求单独使用一个servlet
b、未实现则所有请求公用一个servlet实例

写servlet方法:

package cc.zhouzhou;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class Test extends HttpServlet {
	//doGet方法由tomcat调用
	//HttpServletRequest实现类由tomcat实现,由RequestFacade传递连接
	//RequestFacade是Request类的门面模式
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //实现方法
        super.doGet(req, resp);
    }
}

问题:为什么应用程序是打war包的形式?而不是jar包?
因为如果是jar包,程序不知道是当做依赖包还是应用包,无法区分。
tomcat中判断是否是war包其实是hardcode的形式判断的。

二、tomcat执行请求流程解析
在这里插入图片描述
根据上图讲解最后部分的步骤:
1、请求Request是:Http://localhost:8080/HelloServlet/Servletdemo
2、Adapter 在这步骤进行设置值,伪代码如下:

request.setHost(Host)
request.setContext(Context)
request.setWrapper(Wrapper)
getEngine获取阀门

3、Engine
4、HOST
5、Context
6、Wrapper servlet=wrapper.allocate();简单来说是new DemoServlet
7、FilterChain
8、最终调用servlet.service()方法
根据源代码发现最终调用的是servlet的service方法,此service方式是父类的方法,其中会判断是Get,Post,Put等请求类型,调用不同的方法

三、tomcat与socket/tcp/http协议关系
数据–Tomcat—new Request
服务器–操作系统–Tomcat应用程序
服务器A–服务器B
可靠传输–TCP协议–操作系统
数据+Ip

Linux tcp_connnect()---创建tcp连接
	1、构造数据
	2、创建一个tcp连接--java--tcp_connect()
	3、传输数据

TCP:socket----_sys_connect—tcp_connect

socket.getInputStream
	byte[]--http协议转换--request--connect

UDP:DatagramSocket 是udp

四、tomcat io模型解析
Tomcat从socket获取数据
Bio或者Nio(最简单来说,区别是速度)
BIO阻塞:一个socket对应一个线程,不是一个http请求对应一个线程,多对一

Tomcat是打破双亲委派的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值