Web容器(一):Web容器簡介

本文參照:極客時間-《深入拆解 Tomcat & Jetty》-開篇詞 | Java程序員如何快速成長 + 01_Web容器學習路徑

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容器

其他應用服務器比如JBoss和WebLogic,它們不僅僅有Servlet容器的功能,也包含EJB容器,是完整的Java EE應用服務器。從這個角度看,Tomcat和Jetty算是一個輕量級的應用服務器。在微服務架構日漸流行的今天,開發人員更喜歡穩定的、輕量級的應用服務器,並且應用程序用內嵌的方式來運行Servlet容器也逐漸流行起來。

Web容器與Spring、Web應用等的關係

Servlet技術是Web開發的原點,幾乎所有的Java Web框架(比如Spring)都是基於Servlet的封裝,Spring應用本身就是一個Servlet,而Tomcat和Jetty這樣的Web容器,負責加載和運行Servlet。你可以通過下面這張圖來理解Tomcat和Jetty在Web開發中的位置。
在這裏插入圖片描述

Web容器作用

web開發中 web 容器的作用(如tomcat)

Web容器處理流程

1.client點擊一個URL,其URL指向一個servlet

在這裏插入圖片描述

2.容器識別出這個請求索要的是一個servlet,所以創建兩個對象:httpservletrequest、httpservletresponse

在這裏插入圖片描述

3.容器根據請求中的URL找到對應的servlet,爲這個請求創建或分配一個線程,並把兩個對象request和response傳遞到servlet線程中

在這裏插入圖片描述

4.容器調用servlet的service()方法。根據請求的不同類型,service()方法會調用doGet()或者doPost()方法

在這裏插入圖片描述

5.doGet()方法生成動態頁面,然後把這個頁面填入到response對象中

在這裏插入圖片描述

6.線程結束,容器把response對象轉換成http響應,傳回client,並銷燬response和request對象

在這裏插入圖片描述

Web容器涉及的知識點

Tomcat和Jetty作爲工業級的中間件,它們的設計非常優秀,比如面向接口編程組件化骨架抽象類一鍵式啓停對象池技術以及各種設計模式,比如模板方法觀察者模式責任鏈模式等。

Web容器如何學習?

操作系統基礎

Java語言其實是對操作系統API的封裝,上層應用包括Web容器都是通過操作系統來工作的,因此掌握相關的操作系統原理是我們深刻理解Web容器的基礎。

對於Web容器來說,操作系統方面你應該掌握它的工作原理,比如什麼是進程、什麼是內核、什麼是內核空間和用戶空間、進程間通信的方式、進程和線程的區別、線程同步的方式、什麼是虛擬內存、內存分配的過程、什麼是I/O、什麼是I/O模型、阻塞與非阻塞的區別、同步與異步的區別、網絡通信的原理、OSI七層網絡模型以及TCP/IP、UDP和HTTP協議。

《UNIX環境高級編程》。

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核心技術》、《Java編程思想》、《Java併發編程實戰》和《深入理解Java虛擬機:JVM高級特性與最佳實踐》等。

Java Web開發基礎

具備了一定的操作系統和Java基礎,接下來就可以開始學習Java Web開發,你可以開始學習一些通用的設計原則和設計模式。這個階段的核心任務就是了解Web的工作原理,同時提高你的設計能力,注重代碼的質量。我的建議是可以從學習Servlet和Servlet容器開始。

Web框架的本質是,開發者在使用某種語言編寫Web應用時,總結出的一些經驗和設計思路。很多Web框架都是從實際的Web項目抽取出來的,其目的是用於簡化Web應用程序開發。

以Spring框架爲例,給你講講Web框架是怎麼產生的。Web應用程序的開發主要是完成兩方面的工作。

•設計並實現類,包括定義類與類之間的關係,以及實現類的方法,方法對數據的操作就是具體的業務邏輯。

•類設計好之後,需要創建這些類的實例並根據類與類的關係把它們組裝在一起,這樣類的實例才能一起協作完成業務功能。

Spring框架就是對Servlet的封裝,Spring應用本身就是一個Servlet,而Servlet容器是管理和運行Servlet的,因此我們需要先理解Servlet和Servlet容器是怎樣工作的,才能更好地理解Spring。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章