深入拆解 Tomcat & Jetty 笔记(一)
Web 容器学习路径
Web 容器是什么?
- 早期的 Web 应用主要用于浏览新闻等静态页面,HTTP 服务器(比如 Apache、Nginx)向浏览器返回静态 HTML,浏览器负责解析 HTML,将结果呈现给用户。
- 随着互联网的发展,我们已经不满足于仅仅浏览静态页面,还希望通过一些交互操作,来获取动态结果,因此也就需要一些扩展机制能够让 HTTP 服务器调用服务端程序。
- 于是 Sun 公司推出了 Servlet 技术。你可以把 Servlet 简单理解为运行在服务端的 Java 小程序,但是 Servlet 没有 main 方法,不能独立运行,因此必须把它部署到 Servlet 容器中,由容器来实例化并调用 Servlet。
- 而 Tomcat 和 Jetty 就是一个 Servlet 容器。为了方便使用,它们也具有 HTTP 服务器的功能,因此 Tomcat 或者 Jetty 就是一个“HTTP 服务器 + Servlet 容器”,我们也叫它们 Web 容器。
- 在微服务架构日渐流行的今天,开发人员更喜欢稳定的、轻量级的应用服务器,并且应用程序用内嵌的方式来运行 Servlet 容器也逐渐流行起来。
- 之所以选择轻量级,是因为在微服务架构下,我们把一个大而全的单体应用,拆分成一个个功能单一的微服务。
- 在这个过程中,服务的数量必然要增加,但为了减少资源的消耗,并且降低部署的成本,我们希望运行服务的 Web 容器也是轻量级的,Web 容器本身应该消耗较少的内存和 CPU 资源,并且由应用本身来启动一个嵌入式的 Web 容器,而不是通过 Web 容器来部署和启动应用,这样可以降低应用部署的复杂度。
Web 容器该怎么学?
- 操作系统基础
- 对于 Web 容器来说,操作系统方面你应该掌握它的工作原理。
- 比如什么是进程、什么是内核、什么是内核空间和用户空间、进程间通信的方式、进程和线程的区别、线程同步的方式、什么是虚拟内存、内存分配的过程、什么是 I/O、什么是 I/O 模型、阻塞与非阻塞的区别、同步与异步的区别、网络通信的原理、OSI 七层网络模型以及 TCP/IP、UDP 和 HTTP 协议。
- Java 语言基础
- Java 的基础知识包括 Java 基本语法、面向对象设计的概念(封装、继承、多态、接口、抽象类等)、Java 集合的使用、Java I/O 体系、异常处理、基本的多线程并发编程(包括线程同步、原子类、线程池、并发容器的使用和原理)、Java 网络编程(I/O 模型 BIO、NIO、AIO 的原理和相应的 Java API)、Java 注解以及 Java 反射的原理等。
- 此外你还需要了解一些 JVM 的基本知识,比如 JVM 的类加载机制、JVM 内存模型、JVM 内存空间分布、JVM 内存和本地内存的区别以及 JVM GC 的原理等。
- Java Web 开发基础
- 具备了一定的操作系统和 Java 基础,接下来就可以开始学习 Java Web 开发,你可以开始学习一些通用的设计原则和设计模式。
- 这个阶段的核心任务就是了解 Web 的工作原理,同时提高你的设计能力,注重代码的质量。
- 我的建议是可以从学习 Servlet 和 Servlet 容器开始。Spring 框架就是对 Servlet 的封装,Spring 应用本身就是一个 Servlet,而 Servlet 容器是管理和运行 Servlet 的,因此我们需要先理解 Servlet 和 Servlet 容器是怎样工作的,才能更好地理解 Spring。