在学习之前,我们想想什么是 Web 容器,以及怎么学习 Web 容器。在学习一门技术之前,想想这两个问题,可以达到事半功倍的效果。
让我们回顾一下web技术的发展历史,可以帮助你理解web容器的由来。
早期的web应用主要应用于浏览静态网页,HTTP服务器(比如Apache、Nginx)向浏览器返回静态HTML,浏览器负责解析HTML,将结果呈现给用户。
随着互联网发展,我们已不满足于仅仅浏览静态网页,还希望通过一些交互操作来获取动态结果,因此也就需要一些扩展机制能够让Http服务器调用服务端程序。
于是Sun公司推出了Servlet容器。可以把servlet简单理解为运行在服务端的java小程序,但是servlet没有main方法,不能独立运行,因此必须把它部署到serlet容器,由容器来实例化并调用servlet。
而Tomcat和jetty就是一个Servlet容器。为了方便使用,他们也具有Http协议服务器的功能,因此Tomcat或jetty就是“HTTP服务器+Servlet容器”,我们也叫它Web容器。
其他应用服务器比如JBoss和WebLogic,他们不仅有servlet容器的功能,也包含EJB容器,是完整的javaEE应用服务器,从这个角度看,Tomcat和jetty算是轻量级的应用服务器。
在微服务架构日渐流行的今天,开发人员比较喜欢稳定的、轻量级的应用服务器,并且应用服务器用内嵌的方式来内嵌的方式运行servlet容易也逐渐流行起来。
为什么选择轻量级的服务
在微服务架构下,我们把一个大而全的单体应用,拆分成一个个功能单一的微服务,在这个过程中,服务的数量必然增加,为了减少资源的消耗,并降低部署的成本,我们也希望运行部署的web容器也是轻量级的,web容器本身应该消耗较少的内存和CPU资源,并且由应用本身来启动一个嵌入式的web容器,而不是通过web容器来部署和启动应用,这样可以降低应用部署的复杂度。
因此轻量级的Tomcat和jetty就是一个很好的选择,并且Tomcat它本身也是Springboot默认的嵌入式Servlet容器。最新版本Tomcat和jetty也支持Servlet4.0。
Web容器怎么学
学习Java Web容器之前需要学习一些计算机基础知识:
- 操作系统基础 java语言其实是对操作系统API的封装,上层应用包括web容器都是通过操作系统工作的,因此掌握相关的操作系统原理是我们深刻理解web容器的基础。
对于web容器来说,操作系统方面应该掌握它的工作原理,比如什么是进程、什么是内核、什么是内核空间和用户空间、进程间通信的方式、进程和线程的区别、线程同步的方式、什么是虚拟内存、内存分配的过程,什么是I/O,什么是I/O模型、阻塞与非阻塞的区别、同步与异步的区别、网络通信的原理、OSI七层网络模型以及TCP/IP、UDP和Http协议。 ,比如什么是进程、什么是内核、什么是内核空间和用户空间、进程...