解析TOMCAT框架

畢竟TOMCAT的框架還是比較複雜的, 單是從文字上理解, 是不那麼容易掌握TOMCAT的框架的。 所以得實踐、實踐、再實踐。 建議下載一份TOMCAT的源碼, 調試通過, 然後單步跟蹤其啓動過程。 如果有不明白的地方, 再來查閱本文, 看是否能得到幫助。 我相信這樣效果以及學習速度都會好很多!
  
1. Tomcat的整體框架結構
   Tomcat的基本框架, 分爲4個層次。
   Top Level Elements:
    Server
    Service  
   Connector
    HTTP
    AJP
   Container
   Engine
     Host
   Context
   Component 
    manager
   logger
   loader
   pipeline
   valve
         ...
   站在框架的頂層的是Server和Service
   Server:  其實就是BackGroud程序, 在Tomcat裏面的Server的用處是啓動和監聽服務端事件(諸如重啓、關閉等命令。 在tomcat的標準配置文件:server.xml裏面, 我們可以看到“<Server port="8005" shutdown="SHUTDOWN" debug="0">”這裏的"SHUTDOWN"就是server在監聽服務端事件的時候所使用的命令字)
   Service: 在tomcat裏面, service是指一類問題的解決方案。  通常我們會默認使用tomcat提供的:Tomcat-Standalone 模式的service。 在這種方式下的service既給我們提供解析jsp和servlet的服務, 同時也提供給我們解析靜態文本的服務。
  
   Connector: Tomcat都是在容器裏面處理問題的, 而容器又到哪裏去取得輸入信息呢?
Connector就是專幹這個的。 他會把從socket傳遞過來的數據, 封裝成Request, 傳遞給容器來處理。
   通常我們會用到兩種Connector,一種叫http connectoer, 用來傳遞http需求的。 另一種叫AJP, 在我們整合apache與tomcat工作的時候, apache與tomcat之間就是通過這個協議來互動的。 (說到apache與tomcat的整合工作, 通常我們的目的是爲了讓apache 獲取靜態資源, 而讓tomcat來解析動態的jsp或者servlet。)
   Container: 當http connector把需求傳遞給頂級的container: Engin的時候, 我們的視線就應該移動到Container這個層面來了。
   在Container這個層, 我們包含了3種容器: Engin, Host, Context.
   Engin: 收到service傳遞過來的需求, 處理後, 將結果返回給service( service 是通過 connector 這個媒介來和Engin互動的 ).
   Host: Engin收到service傳遞過來的需求後,不會自己處理, 而是交給合適的Host來處理。
Host在這裏就是虛擬主機的意思, 通常我們都只會使用一個主機,既“localhost”本地機來處理。
   Context: Host接到了從Host傳過來的需求後, 也不會自己處理, 而是交給合適的Context來處理。
   比如: <http://127.0.0.1:8080/foo/index.jsp>
         <http://127.0.1:8080/bar/index.jsp>
   前者交給foo這個Context來處理, 後者交給bar這個Context來處理。
   很明顯吧! context的意思其實就是一個web app的意思。
   我們通常都會在server.xml裏面做這樣的配置
   <Context path="/foo" docBase="D:/project/foo/web" />
   這個context容器,就是用來幹我們該乾的事兒的地方的。

 

畢竟TOMCAT的框架還是比較複雜的, 單是從文字上理解, 是不那麼容易掌握TOMCAT的框架的。 所以得實踐、實踐、再實踐。 建議下載一份TOMCAT的源碼, 調試通過, 然後單步跟蹤其啓動過程。 如果有不明白的地方, 再來查閱本文, 看是否能得到幫助。 我相信這樣效果以及學習速度都會好很多!
  
1. Tomcat的整體框架結構
   Tomcat的基本框架, 分爲4個層次。
   Top Level Elements:
    Server
    Service  
   Connector
    HTTP
    AJP
   Container
   Engine
     Host
   Context
   Component 
    manager
   logger
   loader
   pipeline
   valve
         ...
   站在框架的頂層的是Server和Service
   Server:  其實就是BackGroud程序, 在Tomcat裏面的Server的用處是啓動和監聽服務端事件(諸如重啓、關閉等命令。 在tomcat的標準配置文件:server.xml裏面, 我們可以看到“<Server port="8005" shutdown="SHUTDOWN" debug="0">”這裏的"SHUTDOWN"就是server在監聽服務端事件的時候所使用的命令字)
   Service: 在tomcat裏面, service是指一類問題的解決方案。  通常我們會默認使用tomcat提供的:Tomcat-Standalone 模式的service。 在這種方式下的service既給我們提供解析jsp和servlet的服務, 同時也提供給我們解析靜態文本的服務。
  
   Connector: Tomcat都是在容器裏面處理問題的, 而容器又到哪裏去取得輸入信息呢?
Connector就是專幹這個的。 他會把從socket傳遞過來的數據, 封裝成Request, 傳遞給容器來處理。
   通常我們會用到兩種Connector,一種叫http connectoer, 用來傳遞http需求的。 另一種叫AJP, 在我們整合apache與tomcat工作的時候, apache與tomcat之間就是通過這個協議來互動的。 (說到apache與tomcat的整合工作, 通常我們的目的是爲了讓apache 獲取靜態資源, 而讓tomcat來解析動態的jsp或者servlet。)
   Container: 當http connector把需求傳遞給頂級的container: Engin的時候, 我們的視線就應該移動到Container這個層面來了。
   在Container這個層, 我們包含了3種容器: Engin, Host, Context.
   Engin: 收到service傳遞過來的需求, 處理後, 將結果返回給service( service 是通過 connector 這個媒介來和Engin互動的 ).
   Host: Engin收到service傳遞過來的需求後,不會自己處理, 而是交給合適的Host來處理。
Host在這裏就是虛擬主機的意思, 通常我們都只會使用一個主機,既“localhost”本地機來處理。
   Context: Host接到了從Host傳過來的需求後, 也不會自己處理, 而是交給合適的Context來處理。
   比如: <http://127.0.0.1:8080/foo/index.jsp>
         <http://127.0.1:8080/bar/index.jsp>
   前者交給foo這個Context來處理, 後者交給bar這個Context來處理。
   很明顯吧! context的意思其實就是一個web app的意思。
   我們通常都會在server.xml裏面做這樣的配置
   <Context path="/foo" docBase="D:/project/foo/web" />
   這個context容器,就是用來幹我們該乾的事兒的地方的。

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