乐趣区

关于tomcat:Tomcat技术原理浅析

前言

依照常规,厘清利用之间的关系,使学习自身造成一个体系框架。Tomcat、常见的一个 Web 应用服务器(临时以此称说,下文会有分类辨析),旨在总结学习过程中的重点,相应常识不清晰时能够有一个绝对清朗的概念,底层原理倡议从专业书籍中获取。

辨析 Web 服务器、应用程序服务器与 Web 容器

随着技术的逐步倒退,各个服务器的性能都在逐步扩大,界线也越来越含糊,以至于初听到这些名词的时候,感觉不能了解。最好的了解应该是在特定的利用场景下对具体的技术深刻理解,而后再做体系的学习。先介绍三个概念,再简略对服务器作一个划分。

Web 服务器:基本功能是提供 Web 信息浏览服务,存储、解决和传递网页给客户端,应用 HTTP 协定进行传输,不波及非动态资源的获取。其波及到的功能模块次要如下:

  • TCP 监听模块:服务器监听某个端口(个别是 8080 端口),以建设与客户端之间的连贯
  • 预处理:此处次要做三件事:1. 从 TCP 报文中获取 HTTP 申请报文。2. 依据和用户代理的协商进行解密,解压,平安解决等。3. 依据服务器本身的配置进行平安解决,建设会话状态等
  • URI 路由:解析 URL 字符串和动作以确定用户代理申请的资源,依据匹配规定(通常依据正则表达式 + 后缀)路由到动态资源解决模块或动静资源解决模块
  • 动态资源解决模块:负责找到动态资源,比方 HTML/Javascript/CSS 文件 / 图片 / 图像,确定内容是字符流或者字节流,并确定对应 MIME, 比方 HTML 生成 MIME 为 text/html 的字符流,mpeg 视频文件生成 MIME 为 video/mpeg 的字节流
  • 动静资源解决模块:运行业务解决逻辑,我了解 是调用其余程序对应的服务解决信息。
  • 后处理:依据和客户端协商的协定进行加密,压缩,平安解决等
  • 资源输出模块:把解决好的内容和类型封装成 HTTP 报文,发送到 TCP 连贯的另一端

应用程序服务器:作为应用程序服务器,它通过各种协定(包含 HTTP 协定),把商业逻辑裸露给 (expose) 客户端应用程序。Web 服务器次要是解决向浏览器发送 HTML 以供浏览,而应用程序服务器提供拜访商业逻辑的路径以供客户端应用程序应用。应用程序应用此商业逻辑就象你调用对象的一个办法 (或过程语言中的一个函数) 一样。

在大多数情景下,应用程序服务器是通过组件 (component) 的利用程序接口 (API) 把商业逻辑裸露 (expose)(给客户端应用程序) 的,例如基于 J2EE(Java 2 Platform,Enterprise Edition)应用程序服务器的 EJB(Enterprise JavaBean)组件模型。此外,应用程序服务器能够治理本人的资源,例如看大门的工作 (gate-keeping duties) 包含平安 (security),事务处理(transaction processing),资源池(resource pooling),和音讯(messaging)。就象 Web 服务器一样,应用程序服务器配置了多种可扩大(scalability) 和容错 (fault tolerance) 技术。

Web 容器:能够了解为加强 Web 服务器动静获取资源的能力,以下是代表性的动静获取资源技术:

技术名词 特点
CGI 专用网关接口 以独立过程运行,能够用多种语言开发,比方 C,C++,VB,Perl,灵便但效率低,保护简单
PHP 服务器端嵌入 HTML 脚本,开源,功能强大,扩展性较差
JSP 服务器端嵌入 HTML 脚本,跨平台,部署前需编译,次要毛病是编写 JSP 比较复杂,需相熟 JAVA 及相干技术
ASP 服务器端嵌入 HTML 脚本,开发简略,功能强大,只能在 windows 下运行

开发一个 Web 程序开发框架,蕴含运行环境(比方解释执行 JSP、Php 等),解决鲁捧性、可靠性,提供疾速开发接口,开发人员专一于业务实现,框架也提供定制和扩大,这个框架也称为 Web 容器。相比拟于,减少的次要功能模块为:

  • 调配线程池资源:容器为每个申请调配一个线程进行解决,通常采取线程池的形式高效理由 CPU 算资源
  • 封装 Request/Response 上下文:一个申请对应一个上下文,Request 申请包含 URL、Http 申请、以及构建的 Session、Cookie 等对象
  • URl 路由
  • 动静资源解决模块:比方 Java 的 Servlet
  • 回收资源:回收线程资源,个别都以线程池形式实现,所以将线程返回线程池

一些支流服务器

名词 Web 服务器 Web 容器 应用程序服务器 反向代理反对
IIS
Nginx
Apache
Tomcat
Jetty
WebSphere
WebLogic

能够见到

Web 服务器:IIS、Nginx、Apache

应用程序服务器:WebSphere、WebLogic

至于 Tomcat、Jetty,其提供了动态资源服务器的性能,也扩大了应用程序服务器的一些性能。所以其个别称为 Web 容器,也有叫做轻量级应用程序服务器,其余叫法依我看是不太精确的。

还有一个观点,既然 Tomcat 蕴含了动态服务器的性能,兼具应用程序服务器的某些个性,那只用 Tomcat、Jetty 就行了??emmm 模棱两可,实际上个别在 Tomcat 这些 Web 容器前流量会走一层 Nginx 做代理,同时解决动态资源。

最初赘述一点,Jetty 与 Tomcat 同为 ServletWeb 容器,次要解决 HTTP;Netty 是一个高性能、异步事件驱动的 NIO 框架,它提供了对 TCP、UDP 和文件传输的反对。

Tomcat 底层

Tomcat 的架构核心内容是 Connector 和 Container 组件

一个 Server 服务器中可能有多个 Service,Service 能够临时了解为“服务”。Server 负责管理 Service 的生命周期,让外界可能拜访,Service 将 Connector 和 Container 分割在一起。

  • Connector:负责创立 Request 和 Response 对象

  • Container

    • Engine
    • Host:虚拟主机
    • Context:所属 Web 利用的上下文
    • Wrapper:针对每一个具体的 Servlet
本想着具体介绍一点,这部分材料很多,不仅反复且不迭别人优良,能够联合 Tomcat 的配置文件了解一下其架构。
退出移动版