在介绍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去组织数据,以符合指定的协议。

最新文章

  1. Dagger2 (三) 总结篇
  2. maven配置和下载
  3. Django补遗(一)
  4. 评价qq拼音输入法
  5. Jetty源码分析(一)
  6. 将src非空的属性注入到des中
  7. javaweb学习之Servlet开发(二)
  8. 腾讯云从零部署nodejs站点
  9. SparkSQL使用之如何使用UDF
  10. strust2 配置chainAction结果类型的配置
  11. Hadoop HDFS概念学习系列之分布式文件管理系统(二十五)
  12. 简单的同步MSMQ
  13. SeaJS学习笔记(一) ./ 和 ../ 区别
  14. 也用 Log4Net 之将自定义属性记录到文件中 (三)
  15. vbs运行批处理
  16. oracle积累继续
  17. 读书笔记 effective c++ Item 50 了解何时替换new和delete 是有意义的
  18. ionic2新手入门整理,搭建环境,创建demo,打包apk,热更新,优化启动慢等避坑详解
  19. 轻松学会ES6新特性之生成器
  20. 约会 倍增lca

热门文章

  1. centos6 安装tensorflow
  2. Python中的单继承与多继承实例分析
  3. Server2008实验——私钥和添加数据恢复代理程序
  4. mybatis 基于xml 配置的映射器
  5. DP,数论————洛谷P4317 花神的数论题(求1~n二进制中1的个数和)
  6. 【VS开发】【DSP开发】WinDriver简介(或介绍)
  7. 【计算机视觉】time of flight (TOF)
  8. css 左右固定宽度,中间自适应的三列布局
  9. CSS - Animate动画
  10. 基于Docker 搭建 Jenkins