Tomcat 是在SUN 公司的JSWDK(JavaServer Web DevelopmentKit ,是SUN公司推出的小型Servlet/JSP調試工具)的基礎上發展起來的一個優秀的Servlet容器,Tomcat本身完全用java語言編寫。
Servlet是一種運行在服務器上的小插件,他所具有的的以下特點:
1、提供了可被服務器加載並執行的程序代碼,並服務於來自客戶端的請求。
2、Servlet服務器必須支持java。
3、Servlet不依賴瀏覽器,是允許在服務器端,所以不管瀏覽器是否支持java,都能請求訪問servlet。
Tomcat做為Servlet的容器基本功能如圖一
圖一
Servlet 的規范規定Servlet不僅可以運行在基於HTTP協議的Web服務器上,還可以運行在基於其他應用協議的服務器上。不過,目前Servlet主要運行在Web服務器上,用來擴展Web服務器的功能。Servlet規范規定,Servlet容器響應客戶請求訪問特定的Servlet的流程如下:
1、客戶發出要求訪問特定的Servlet的請求。
2、Servlet 容器接收到客戶請求並解析。
3、Servlet 容器創建一個ServletRequest對象,在ServletRequest對象中包含了客戶請求信息及其他關於客戶的信息,如請求頭,請求正文,以及客戶機的IP地址等。
4、Servlet容器創建一個ServletResponse對象
5、Servlet 容器調用客戶所請求的Servlet的service服務方法,並且把ServletRequst對象和ServletResponse對象做為參數傳給該服務方法。
6、Servlet從ServletRequest對象中可獲取客戶的請求信息。
7、Servlet利用ServletResponse對象來生成響應結果。
8、Servlet容器吧Servlet生成的響應結果發送給客戶。
Tomcat的組成如圖二
圖二
1、<Server> 元素:代表整個Servlet容器組件,是Tomcat的頂層元素。在<Server>元素中可以包含一個或者多個<Service>元素。
2、<Service>元素:包含一個<Engine>元素,以及一個或多個<Connector>元素,這些<Connector>原先共享一個<Engine>元素。
3、<Connector>元素:代表和客戶程序時間交互的組件,負責接收客戶請求,以及想客戶返回響應結果。
4、<Engine>元素:每個<Service>只能有一個<Engine>元素。<Engine>元素處理在同一個<Service>中所有<Contector>元素接收到的客戶請求。
5、<Host>元素:在一個<Engine>元素中可以包含多個<Host>元素。每個<Host>元素定義了一個虛擬主機,他可以包含一個或多個Web應用。
6、<Context>元素:使用最頻繁的元素。每個<Context>元素代表了運行在虛擬主機上的單個Web應用。在一個<Host>元素中可以包含多個<Context>元素。
Tomcat做為Servlet的容器,有以下三種工作模式
1、做為獨立的Servlet容器,如圖三
Tomcat作為獨立的Web服務器來單獨運行,Servlet容器組件做為Web服務器中的一部分二存在,這是Tomcat的默認工作模式。
圖三
2、作為其他Web服務器進程內的Servlet容器。如圖四
在這種模式下,Tomcat分為Web服務器插件和Servlet容器組件兩個部分,Web服務器組件獲得用戶請求,利用JNI通信機制給Servlet容器組件。JNI指是Java本地調用接口,通過這一接口,Java程序可以和采用其他語言編寫的本地程序進行通信。
圖四
3、其他Web服務器進程外的Servlet容器。如圖五
在這種模式下,Tomcat分為Web服務器組件和Servlet容器組件兩部分。Web服務器獲取用戶請求,並通過IPC通信機制發送給Servlet容器組件。
圖五