前言

依照常规,厘清利用之间的关系,使学习自身造成一个体系框架。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的配置文件了解一下其架构。