目前,我正在學習 Java Web 開發。
很多對我來說似乎只是配置,我覺得我的理解是膚淺的,因為我只看到了配置(即在web.xml檔案中定義你的servlet和它們的映射,通過擴展HttpServlet類來制作自定義的Servlet,在main方法中實體化Tomcat等)
我想知道更多關于幕后實際發生的事情 - 所以我需要一些指導。
為此,我從以下鏈接粗略閱讀了 Tomcat 和 servlet:
- 什么是小服務程式
- 嵌入式與非嵌入式的區別
- Tomcat 檔案
所以我想我從中理解的是 servlet 位于 Tomcat 實體(一個 servlet 容器)內,Tomcat 處理所有接收客戶端的所有請求并將它們中繼到 servlet。servlet 處理請求,發回回應,然后 Tomcat 將回應發送回客戶端。我想在我擁有的本地設定中,我的機器將同時充當客戶端和服務器。
鑒于以上我想知道:
- 如何直接查看和監控客戶端向Tomcat發送請求并驗證Tomcat是否收到請求?本質上,我如何驗證網路方面的事情是否由于 Tomcat 的某些實作而發生?
- Tomcat是如何決議請求資訊并發送給servlet的呢?
- Tomcat 是 servlet 容器還是 Web 服務器?這些是同一件事嗎?
- 在關于嵌入式與非嵌入式的第二個鏈接中給出的答案中,答案指出嵌入式服務器看起來像一個常規的 Java 程式。這是否意味著對于嵌入式服務器,在非嵌入式情況下,服務器位于 java 應用程式中,而 Web 應用程式位于服務器內部?就像牽制關系是顛倒的?收容在這里首先意味著什么?
對眾多問題深表??歉意,并感謝您幫助澄清。
uj5u.com熱心網友回復:
2、Tomcat如何決議請求資訊并發送給servlets?
該Servlet規范解釋說,在細節。該規范非常容易閱讀;我建議試一試。
作為一個簡化的概述......
Servlet 容器的作業是處理傳入的請求,它只是一堆文本。Servlet 容器將各個部分拉出并將它們組裝成一個請求物件。
同樣,servlet 產生的回應被打包為回應物件。Servlet 容器的作業是使用該物件中包含的所有資訊來創建要發送回客戶端 Web 瀏覽器的文本流。
Servlet 容器的全部意義在于讓撰寫 servlet 的程式員無需了解 HTTP 的許多細節以及如何制作服務器。Servlet 容器完成所有這些作業。換句話說,Servlet 技術的偉大之處在于程式員不需要問你的這個#2 問題!
3. Tomcat 是 servlet 容器還是 Web 服務器?這些是同一件事嗎?
(a) 兩者,(b) 否。
不,servlet 容器和 Web 服務器是兩種不同的軟體。
Web 服務器處理:
- 偵聽來自客戶端(Web 瀏覽器等)的傳入連接
- 將回應發送回客戶端
Web 服務器處理所有網路流量。
Servlet 容器提供了一個環境,在該環境中,相對較小的代碼塊 (servlet) 可以處理請求并制定回應。小 servlet 不必處理網路流量、啟動和關閉、安全性以及完整服務器的所有其他職責。這解釋了“Servlet”中的“-let”。您撰寫的 servlet 插入到一個容器中,該容器完成了成為服務器所需的大部分繁重作業。
有些產品,如Tomcat和Jetty的,可以由兩個Web服務器和Servlet容器。
Tomcat 主要由三個組件組成:(1) Catalina,一個 servlet 容器,(2) Coyote,一個 Web 服務器,以及 (3) Jasper,一個 Jakarta Server Pages 處理器。參見維基百科。
對于大多數人的需求,Tomcat 中的Coyote Web 服務器是一個合適的 Web 服務器。因此,您可以將 Tomcat 用作多合一應用程式服務器,處理 Web 流量和 servlet。
[web request] ? [Tomcat Coyote] ? [Tomcat Catalina] ? [your servlet]
或者,有些人選擇僅將 Tomcat 用作 Servlet 容器,位于單獨的 Web 服務器(例如Apache HTTP Server)后面。在這種情況下,Tomcat 的Coyote組件將不再使用。相反,單獨的 Web 服務器處理客戶端瀏覽器組件,并處理傳入的請求。如果請求需要靜態資源,Web 服務器將提供它,而 Tomcat 沒有任何參與。如果請求請求已分配給 servlet 的作業,則單獨的 Web 服務器會將請求傳遞給 Tomcat 及其Catalina組件。在您的 servlet 產生回應后,回應從 Tomcat 移回外部 Web 服務器,后者將回應傳送到客戶端 Web 瀏覽器。
[web request] ? [Apache HTTP Server] ? [Tomcat Catalina] ? [your servlet]
4 … 嵌入式與非嵌入式 …
非嵌入是經典情況,正如最初發明 Servlet 技術時所設想的那樣。
那時,服務器很少,價格昂貴,并且已經永久存在。Servlet 技術的目標是通過讓許多 Web 應用程式并排運行,使公司能夠輕松地保持那些昂貴的服務器忙碌。
Servlet 技術允許許多不同的 servlet 在一臺機器上運行而不會相互干擾,并且每個 servlet 的程式員都不知道正在撰寫的其他 servlet 的任何資訊。Servlet 容器可以在部署和取消部署 servlet 時保持正常運行。
快進,我們擁有云技術,其中服務器數量眾多、價格低廉,而且可以方便地即時創建和銷毀。因此,現在許多人希望單獨運行他們的 Web 應用程式,每個虛擬機或虛擬服務一個 Web 應用程式。因此需要嵌入模式。我們需要一個可以自行啟動和關閉的應用程式,以運行一個特定的 servlet(或多個旨在協同作業的 servlet),而無需任何其他不相關的 Web 應用程式。
實作這一新目標的一種方法是將 Web 服務器和 servlet 容器打包到一個獨立的 Java 應用程式中。SysAdmin 人員可以像任何其他 Java 應用程式一樣啟動和退出此獨立應用程式,而無需了解如何配置正在進行的 Web 服務器和 Servlet 容器。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/400325.html
