在介绍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. hive简单学习---1

    ---------------------------------------------------------------------------------------------------- ...

  2. Hadoop集群参数和常用端口

    一.Hadoop集群参数配置 在hadoop集群中,需要配置的文件主要包括四个,分别是core-site.xml.hdfs-site.xml.mapred-site.xml和yarn-site.xml ...

  3. Java泛型(1):概述

    通常而言,我们使用一种容器来存储一种类型的对象.而泛型的主要目的之一就是用来指定这个容器要持有什么类型的对象.因此,与其使用Object,我们可以暂时不指定类型. 看下面3个例子: (1) 我们有时候 ...

  4. 【JVM学习笔记】线程上下文类加载器

    有许多地方能够看到线程上下文类加载的设置,比如在sun.misc.Launcher类的构造方法中,能够看到如下代码 先写一个例子建立感性认识 public class Test { public st ...

  5. webbench接口并发测试

    webbench接口并发测试 安装     安装工程中可能会出现确实Ctags的情况,可以进行命令安装: Ubuntu:apt install ctags Centos:yum install cta ...

  6. 不同种类的PI膜及其特性

    一.PI膜种类及其特性 1.聚酰亚胺材料分类 聚酰亚胺材料可分为热塑性聚酰亚胺和热固性聚酰亚胺(包括双马来酰亚胺型和单体反应聚合型聚酰亚胺及各自改性产品)两大类 其中,热塑性聚酰亚胺材料一般采用两步法 ...

  7. 【VS开发】recv函数函数返回值说明(特别有利于工程调试)

    recv函数 int recv( SOCKET s, char FAR *buf, int len, int flags); 不论是客户还是服务器应用程序都用recv函数从TCP连接的另一端接收数据. ...

  8. python实用小功能

    正则匹配手机号码: regExp =r"^((13[0-9])|(15[^4])|(18[0-9])|(17[0-8])|(147)|(19[0-9]))\d{8}$"; 常用于用 ...

  9. xtrabackup备份失败(error writing file 'UNOPENED')

    xtrabackup备份失败 解决了,是因为limit open files值设置太小了 (3)修改资源限制参数 vi /etc/security/limits.conf nproc:用户创建进程数限 ...

  10. CentOS7之yum仓库配置

    操作系统版本:CentOS Linux release 7.2.1511 (Core)  Yum软件版本:yum-3.4.3-132.el7.centos.0.1.noarch  Yum主配置文件:/ ...