1. 程式人生 > >Tomcat科普---湯姆貓的結構設定很美!

Tomcat科普---湯姆貓的結構設定很美!

第一個問題

Tomcat是什麼?

Tomcat是應用伺服器,區別於硬體(應用伺服器和資料伺服器等)它是執行在硬體上的軟體也叫Web應用伺服器。

百度百科是這樣解釋的:Tomcat是Apache 軟體基金會(Apache Software Foundation)的Jakarta 專案中的一個核心專案,由Apache、Sun 和其他一些公司及個人共同開發而成。由於有了Sun 的參與和支援,最新的Servlet 和JSP 規範總是能在Tomcat 中得到體現,Tomcat 5支援最新的Servlet 2.4 和JSP 2.0 規範。因為Tomcat 技術先進、效能穩定,而且免費,因而深受Java 愛好者的喜愛並得到了部分軟體開發商的認可,成為目前比較流行的Web 應用伺服器。

Tomcat 伺服器是一個免費的開放原始碼的Web 應用伺服器,屬於輕量級應用伺服器,在中小型系統和併發訪問使用者不是很多的場合下被普遍使用,是開發和除錯JSP 程式的首選。對於一個初學者來說,可以這樣認為,當在一臺機器上配置好Apache 伺服器,可利用它響應HTML標準通用標記語言下的一個應用)頁面的訪問請求。實際上Tomcat是Apache 伺服器的擴充套件,但執行時它是獨立執行的,所以當你執行tomcat 時,它實際上作為一個與Apache 獨立的程序單獨執行的。

訣竅是,當配置正確時,Apache 為HTML頁面服務,而Tomcat 實際上執行JSP 頁面和Servlet。另外,Tomcat和

IIS等Web伺服器一樣,具有處理HTML頁面的功能,另外它還是一個Servlet和JSP容器,獨立的Servlet容器是Tomcat的預設模式。不過,Tomcat處理靜態HTML的能力不如Apache伺服器。目前Tomcat最新版本為9.0。

第二個問題

Tomcat怎麼用?

首先你就把它當成一個執行在伺服器作業系統上的一個應用軟體就好了。既然是應用軟體那就必然經歷下面幾個過程:下載---安裝---配置環境變數。經過這樣3步,你的Tomcat就搭建好了,以後就可以把自己開發的應用程式部署到Tomcat上執行。那麼自己開發的應用程式是不能直接部署到作業系統的,而是部署到Tomcat裡,Tomcat實際上就是一個個應用程式的管理者,所以叫它應用伺服器,這個伺服器提供應用服務。

具體來講當你在瀏覽器的網址輸入端輸入端輸入一個URL(統一資源定位)時,經過一個特別 複雜的過程後,瀏覽器才能將應用伺服器返回給它的內容解析成你想要的樣子。

訪問某個網址我們經li了什麼

第三個問題

Tomcat這個應用程式的結構是什麼樣的?換句話說這位大美女有什麼特點啊?鼻子高不高?眼睛大不大?身材好不好?不好意思,在程式設計師眼裡,向TOMCAT這樣的應用程式實在是太美了,可以當做範本來學習,提高程式設計的能力,其中蘊含的思想是非常有深度的。

先來看看Tomcat的整體結構:

Tom的身體

層次分明,是不是很有美感?

Tomcat中最頂層的容器叫Server,代表整個伺服器,Server中包含至少一個Service,用於具體提供服務。Service主要包含兩部分:Connector和Container。Connector用於處理連線相關的事情,並提供Socket與request、response的轉換,Container用於封裝和管理Servlet,以及具體處理request請求。一個Tomcat中只有一個Server,一個Server可以包含多個Service,一個Service只有一個Container,但可以有多個Connectors(因為一個服務可以有多個連線,如同時提供http和https連線,也可以提供相同協議不同埠的連線)。

這是標準技術性描述,不用理解技術術語的前提下完全可以看懂Tomcat是由什麼組成的,每個元件的數量是多少,這些說得都非常清楚。

說了半天原來這個美女的外國名字叫:Server,你可以翻譯成女僕的。這位人民公僕會“分身術”,所以它可以同時提供很多個Service(服務),比如同時給你洗腳、捶背、泡茶、做美食。牛不牛,這個“分身術”的設定就很牛!然後重點來了,每個Service都包括一個Connector和一個Container.翻譯過來就是,每一項服務都需要“預約”,然後把給你服務需要的工具箱(Container)拿出來。

Connector這東西,看起來就是個簡單的連線,像極了打電話,你撥號出去輸入1234567786等等,移動服務商的裝置卻經歷了一個複雜的過程幫你呼叫那個叫“小麗”的使用者。Connector也是一樣的,要轉變或者翻譯給內部的Container。

Connector: 處理連線相關的事情,並提供Socket與request、response的轉換; 因為我們的一個請求通過瀏覽器發出後是通過Socket、TCP/IP、HTTP等完成的,這些內容自己去看一下《網路程式設計》,應用層、傳輸層、網路層、鏈路層、物理層等等,這個過程還是比較複雜的。

Container: 封裝和管理Servlet(伺服器應用),以及具體處理request請求。

結構圖

容器裝配結構圖

上面兩幅圖Container的結構圖和Container容器裝配結構圖。

Container的子容器Engine、Host、Context、Wrapper是逐層包含的關係,其中Engine是最頂層,每個service最多隻能有一個Engine,Engine裡面可以有多個Host,每個Host下可以有多個Context,每個Context下可以有多個Wrapper。

4個容器的作用分別是:

□Engine:引擎,用來管理多個站點,一個Service最多隻能有一個Engine。

□Host:代表一個站點,也可以叫虛擬主機,通過配置Host就可以新增站點。

□Context:代表一個應用程式,對應著平時開發的一套程式,或者一個WEB-INF目錄以及下面的web.xml檔案。

□Wrapper:每個Wrapper封裝著一個Servlet。

Context和Host的區別是Context表示一個應用,比如,預設配置下webapps下的每個目錄都是一個應用,其中ROOT目錄中存放著主應用,其他目錄存放著別的子應用,而整個webapps是一個站點。假如www.excelib.com域名對應著webapps目錄所代表的站點,其中的ROOT目錄裡的應用就是主應用,訪問時直接使用域名就可以,而webapps/test目錄存放的是test子應用,訪問時需要用www.excelib.com/test,每一個應用對應一個Context,所有webapps下的應用都屬於www.excelib.com站點,而blog.excelib.com則是另外一個站點,屬於另外一個Host。

如果你只是想了解一下湯姆貓基本的“美”,科普到這裡已經可以了。如果你想更好地體會它的美,那麼到官網下載原始碼來研究一下吧,那裡你會發現一個不一樣的世界,歐耶!