在介绍Tomcat之前,我们先介绍一个概念Servlet。

Servlet是一个运行在WEB服务器上的小的Java程序,用来接收和响应从客户端发送过来的请求,通常使用HTTP协议。从下图可以看出Servlet依托于容器运行和提供服务,这类容器称为Servlet容器,Tomcat就是一个Servlet容器。

图中请求在Servlet内完成处理并返回结果,此处可以看出Servlet是服务器端接收外部请求的入口,后端所有的与网页请求有关的业务逻辑均由此引出。

Tomcat调用Servlet的流程如下:

1. Tomcat接收请求,由于可能存在多个客户端同时发起请求,所以Tomcat要能够处理并发请求,那么就需要多线程。

Tomcat 默认配置的最大请求数是150,可以自行设置该参数,操作系统对于进程中的线程数有一定的限制:Windows 每个进程中的线程数不允许超过2000,Linux 每个进程中的线程数不允许超过1000,一般在应用超过250个并发时,建议配置集群服务。

2. Tomcat根据接收的请求,寻找到对应的Servlet。由于所有的资源都存放在Tomcat中,在对项目进行加载时Tomcat内部会建立Servlet对象和类所在地址的映射关系,根据映射关系获取到确定的servlet。

3. Tomcat调用Servlet完成请求----响应的业务实现。Tomcat不能预知客户端会访问哪一个Servlet,所以Tomcat需要动态地调用Servlet对象,底层实现依托Java反射机制,最后调用具体的Servlet执行get或post方法并响应客户端。

结合上述过程,简要介绍下Servlet的生命周期:

用户第一次访问Servlet的时候,服务器Tomcat会创建一个Servlet的实例那么Servlet中init方法就会执行。任何一次请求服务器都会创建一个新的线程访问Servlet中的service的方法。在service方法内部根据请求的方式的不同调用doGet或doPost方法。当Servlet中服务器中移除掉,或者关闭服务器,Servlet的实例就会被销毁,那么destroy方法就会执行。

最后讨论一个问题,Tomcat接收请求的过程是怎样的?

1. 服务器端监听一个端口,比如8080,然后等待请求。

2. 客户端也就是浏览器由socket套接字发起请求,然后建立连接,此处为建立TCP连接。

3. 客户端就开始向服务器端发送http请求,http请求携带请求数据。

4. 服务器端读到请求数据就开始处理请求,处理完了后给客户端响应数据并回到读请求的状态。

5. 客户端接收到服务器端响应的数据后客户端会展示数据,并回到发送请求的状态。

顺便讨论一个连接的问题,如果上述请求过程结束后,客户端这个http请求并没有回到发送请求的状态,而是直接销毁,下次请求时需重新建立新的连接,这个连接就是短连接,否则就是长连接。http1.0协议是短连接,http1.1开始支持长连接。

引入一个新概念,何为socket套接字?

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

Tomcat----服务运行的容器的更多相关文章

  1. 基于阿里云容器服务用docker容器运行ASP.NET 5示例程序

    小试阿里云容器服务 之后,接下来有一个挡不住的小试冲动--用docker容器运行程序.首先想到的程序是 ASP.NET 5示例程序,于是参考msdn博客中的这篇博文 Running ASP.NET 5 ...

  2. 解决一台机器同时运行多个Tomcat服务

    http://www.cnblogs.com/itolssy/archive/2008/09/09/1278041.html 如果不加任何修改,在一台服务器上同时运行两个Tomcat服务显然会发生端口 ...

  3. CVE-2016-1240 Tomcat 服务本地提权漏洞

    catalogue . 漏洞背景 . 影响范围 . 漏洞原理 . 漏洞PoC . 修复方案 1. 漏洞背景 Tomcat是个运行在Apache上的应用服务器,支持运行Servlet/JSP应用程序的容 ...

  4. how tomcat works 五 servlet容器 上

    servlet容器是用来处理请求servlet资源,并为Web客户端填充response对象的模块.在上一篇文章(也就是书的第四章)我们设计了SimpleContainer类,让他实现Containe ...

  5. dubbo服务运行的三种方式

    dubbo服务运行,也就是让生产服务的进程一直启动.如果生产者进程挂掉,也就不存在生产者,消费者不能进行消费. Dubbo服务运行的三种方式如下:1.使用Servlet容器运行(Tomcat.Jett ...

  6. Tomcat服务的安装与配置

    介绍 百度百科 Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun 和其他一些公司及个人共同开 ...

  7. 浅谈微服务架构、容器技术与K8S

    关注嘉为科技,获取运维新知 企业应用系统:从单体应用走向微服务架构:从裸金属走向容器. 如果在诸多热门云计算技术诸如容器.微服务.DevOps.OpenStack等之中,找出一个最火的方向,那么可能非 ...

  8. CentOS 7 Tomcat服务的安装与配置

    3422人阅读  http://blog.51cto.com/13525470/2073657 一.Linux下的Java运行环境 Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由S ...

  9. 唯品会RPC服务框架与容器化演进--转

    原文地址:http://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=405781868&idx=1&sn=cbb10d37e25 ...

  10. Tomcat是一个Servlet容器?

    "Tomcat是一个Servlet容器",这句话对于2019年的程序员应该是耳熟能详的. 单纯的思考一下这句话,我们可以抽象出来这么一段代码: class Tomcat { Lis ...

随机推荐

  1. Java对象和集合的拷贝/克隆/复制

    昨天同事遇到了一个奇怪的问题,他需要将一个JavaBean拷贝一份,然后对新创建的Bean进行操作.但是他对新的Bean操作后,会影响旧的Bean的值.当听到这个问题的时候,我第一反应就是他的拷贝方法 ...

  2. IPv4 ping命令

    IPv4 ping命令 一.Linux操作系统 给一台 Linux 主机分配了一个 IPv4 的 IP地址,如何使用 ping命令 确定该 IP地址 能否 ping 通呢? 1.查看主机的 IPv4 ...

  3. React Native的ListView的布局使用

    1> ListView组件用于显示一个垂直的滚动列表,其中的元素之间结构近似而仅数据不同. ListView更适于长列表数据,且元素个数可以增删.和ScrollView不同的是,ListView ...

  4. Linux(centos)安装vim

    当在Linux环境下使用vim提示: vim command not found时,说明系统还没有安装vim. 安装步骤: 1.检查是否已安装 查看一下你本机已经存在的包,确认一下你的VIM是否已经安 ...

  5. SqlServer:SqlServer(服务器磁盘监控,创建管理员账号分配权,添加链接服务器,查询CPU,查询内存)

    1.服务器磁盘监控 (1)总链接服务上开启所有链接服务器的RPC: ----------------------总链接服务器上面,开启每个服务器的RPC --exec sp_serveroption ...

  6. coding.net------WEBHOOK自动部署实战

    使用WebHook自动部署项目今天在laravist.com看到了这个 Webhook 自动部署Git项目 这个教学视频,以前自己也想做这样做一个利用Git WebHook的自动化部署,但总是不成功, ...

  7. Angular中ngx-image-cropper图片裁剪的使用

    GitHub示例源码地址:https://github.com/luoruiemail/ngx-image-cropper 下载下来之后,执行yarn install安装相关node_modules包 ...

  8. nginx 报错:[crit] 12456#0: *5 SSL_do_handshake() failed (SSL: error:1408A0A0:SSL routines:SSL3_GET_CLIENT_HELLO

    解决方法: 将配置 listen ssl; 更换为: listen ; ssl on; 从版本1.15.0开始,ssl on; 指令被废弃,使用 listen 443 ssl; 代替. 具体查看官网: ...

  9. 在 jupyterlab 和 jupyter notebook 中集成conda虚拟环境

    在jupyterlab中切换虚拟环境使用jupyter-conda包,参考链接:https://pypi.org/project/jupyter-conda/ Install Requirements ...

  10. L1-064 估值一亿的AI核心代码 (20 分)

    L1-064 估值一亿的AI核心代码 (20 分)   以上图片来自新浪微博. 本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是: 无论用户说什么,首先把对方说的话在一行中原样打印出来: ...