什么是容器
servlet沒main()方法。它們受控於另一個java應用,這個java應用稱為容器(Container)
Tomcat是這樣的容器,Web服務器應用(Apache)得到一個指向servlet請求時,服務器不是把這個請求交給servlet本身,而是交給部署該servlet的容器。要由容器向servlet提供HTTP請求和響應,而且要由容器調用servlet的方法。
客戶-->請求--->Web服務器應用--->web容器應用--->servlet-------->web服務器主機
客戶<--響應<---Web服務器應用<---web容器應用<---servlet<--------web服務器主機
容器提供:
通信支持:建立serverSocket、監聽某個端口、創建流等;
生命周期管理:控制servlet生死,負責加載類、實例化和初始化servlet、調用servlet方法及使servlet實例能夠被垃圾回收;
所線程支持:容器會自動為接收的每個servlet請求創建一個新的java線程,運行完響應HTTP服務方法線程就結束。
生命方式實現安全:可以使用xml部署描述文件來配置(或修改)安全性,而不用硬編碼寫到servlet類代碼中。
JSP支持。
容器處理servlet
客戶---->http請求---->容器----->servlet
容器---> 創建 請求(HttpServletRequest)/響應(HttpServletResponse) 對象
容器--->請求--->響應--->線程(容器根據URL找到正確的servlet,為這個請求創建或分配線程,並把請求和響應對象傳遞給這個servlet線程)
容器----->servlet service()方法 service根據類型調用doGet()或doPost()方法。
doGet()生成動態頁面,並把這個頁面“塞到”響應對象的一個引用里。
線程結束,容器把響應對象轉為HTTP響應,把它發回給客戶,然后刪除請求和響應對象。
應用服務器和web服務器的區別
首先我們應該對應用服務器和web服務器有一個清晰的概念。所謂的應用服務器,就是提供應用的服務器,這里的應用有很多,比如java應用,ruby 應用,或者 c#應用。
那么什么是web服務器呢?就是提供了web功能的服務器,主要就是http服務,包括圖片的下載,等等一系列和web相關的。
好吧,你會問為什么我們不能直接使用應用服務器呢?應用服務器也提供了http服務,比如tomcat。
那么我們從實際出發。當你瀏覽一個網頁的時候,什么情況下你會覺得速度很慢?我們僅僅考慮頁面本身。那當然是圖片越多顯示得越慢。
好吧,我們至少認識到一點,一些靜態資源,例如圖片,會嚴重影響頁面打開的速度。當然,這僅僅是一個方面。
那么web服務器有什么用呢?web服務器一個優點就是在處理靜態信息上。例如一些靜態的html,圖片,等等其他靜態的東西
tomcat服務器和Apache的理解
Tomcat服務器是一個免費的開放源代碼的Web應用服務器。因為Tomcat技術先進、性能穩定且免費,所以深受Java愛好者的喜愛並得到了部分軟件開發商的認可,成為目前比較流行的Web應用服務器。
一、Tomcat與應用服務器
到目前為止,Tomcat一直被認為是Servlet/JSP API的執行器,也就所謂的Servlet容器。然而,Tomcat並不僅僅如此,它還提供了JNDI和JMX API的實現機制。盡管如此,Tomcat仍然還不能算是應用服務器,因為它不提供大多數J2EE API的支持。
很有意思的是,目前許多的應用服務器通常把Tomcat作為它們Servlet和JSP API的容器。由於Tomcat允許開發者只需通過加入一行致謝,就可以把Tomcat嵌入到它們的應用中。遺憾的是,許多商業應用服務器並沒有遵守此規則。
對於開發者來說,如果是為了尋找利用Servlet、JSP、JNDI和JMX技術來生成Java Web應用的話,選擇Tomcat是一個優秀的解決方案;但是為了尋找支持其他的J2EE API,那么尋找一個應用服務器或者把Tomcat作為應用服務器的輔助,將是一個不錯的解決方案;第三種方式是找到獨立的J2EE API實現,然后把它們跟Tomcat結合起來使用。雖然整合會帶來相關的問題,但是這種方式是最為有效的。。
二、Tomcat與Web服務器
Tomcat是提供一個支持Servlet和JSP運行的容器。Servlet和JSP能根據實時需要,產生動態網頁內容。而對於Web服務器來說, Apache僅僅支持靜態網頁,對於支持動態網頁就會顯得無能為力;Tomcat則既能為動態網頁服務,同時也能為靜態網頁提供支持。盡管它沒有通常的Web服務器快、功能也不如Web服務器豐富,但是Tomcat逐漸為支持靜態內容不斷擴充。大多數的Web服務器都是用底層語言編寫如C,利用了相應平台的特征,因此用純Java編寫的Tomcat執行速度不可能與它們相提並論。
一般來說,大的站點都是將Tomcat與Apache的結合,Apache負責接受所有來自客戶端的HTTP請求,然后將Servlets和JSP的請求轉發給Tomcat來處理。Tomcat完成處理后,將響應傳回給Apache,最后Apache將響應返回給客戶端。
我感覺 Apache服務器 解析靜態網頁的專業服務器
我們tomcat中有內置服務器來訪問Apache!但速度還是不行的