深入分析javaweb技術內幕筆記4---Servlet、Session與Cookie、Tomcat

Servlet工作原理解析

1.Servlet對應的tomcat容器模型:


2.context容器直接管理Servlet在容器的包裝類Wrapper

3.一個context對應一個web工程

4.將servlet包裝成context容器中的StandWrapper原因:StandWrapper是tomcat容器的一部分,它具有容器的特徵,而servlet作爲一個獨立的web開發標準,不應該強耦合在tomcat中。

5.web.xml屬性都被解析到context中,所以說context容器纔是真正運行Servlet的servlet容器

6.<url-pattern>的解析規則,對Servlet和Filter一樣,首先精準匹配,再“最長路徑匹配”,最後後綴匹配

  • 精確匹配:如/foo.htm只會匹配foo.htm這個url
  • 路徑匹配:如/foo/*會匹配以foo爲前綴的url
  • 後綴匹配:如*.htm會匹配所有以.htm爲後綴的url

Session與Cookie

1.Cookie存儲在客戶端,Session存儲在服務端,因此Session更適合存儲用戶隱私和私有的數據

2.不同瀏覽器對Cookie大小限制不同,Cookie在HTTP的頭部,所以通常用gzip的deflate對HTTP Body的壓縮不能壓縮Cookie,如果Cookie的量非常大,則可以考慮將Cookie也做壓縮,壓縮方式是將Cookie的多個K/V對看成普通的文本,做文本壓縮

3.前後端對Cookie的操作:http://blog.csdn.net/zzhao114/article/details/54917357

4.Session需要Cookie的支持,每個Session有一個唯一的ID(name爲JSESSIONID的Cookie)

5.服務端第一次觸發通過request.getSession()方法獲取HttpSession對象。如果當前Session ID還沒有對應的HttpSession對象,就創建一個新的,並將這個對象加到org.apache.catalina.Manager的sessions容器中保存,並管理Session生命週期,Session過期將被揮手,服務器關閉,Session將被序列化到磁盤等

6.爲防止表單重複提交,就要標識用戶的每一次訪問請求,使得每一次訪問對服務端來說都是唯一確定的,可以在用戶請求的一個表單域增加一個隱藏的表單項


Tomcat的系統架構與設計模式

1.tomcat的總體結構


2.Connection用的是數組而不是List集合,但並不是一開始分配一個固定大小的數組

3.組件:

  • tomcat組件的生命週期是通過Lifecycle接口來控制的
  • Connector的主要任務是負責揮手瀏覽器發過來的TCP連接請求,創建一個Request和Response對象分別用於和請求端交換數據。處理請求的線程就是Container組件的事情。(Connector是可以選擇替換)
  • Container是容器的父接口,所有容器都必須實現這個接口,用的是典型的責任鏈的設計模式。其中,host子容器可對web.xml文件解析,Engine代表一個完整的Servlet引擎
  • Engine容器比較簡單,它只定義了一些基本的關聯關係。Engine沒有父容器,它的標準實現類是StandardEngine
  • Host是Engine的子容器,一個Host在Engine中代表一個虛擬主機,這個虛擬主機的作用就是運行多個應用,它負責安裝和展開這些應用,並且標識這個應用以及能夠區分它們。它除了關聯子容器,還保存一個主機應有的信息
  • Context代表Servlet的Context,它具備了Servlet運行的基本環境,理論上只要用Context就能運行Servlet了。簡單的Tomcat可以沒有Engine和Host
  • Wrapper代表一個Servlet,它負責管理一個Servlet,包括Servlet的裝載、初始化、執行及資源回收。Standardwrapper將直接和Servlet的各種信息打交道。Servlet可以獲得的信息都在StandWrapperFacade(StandWrapper的門面封裝類)中封裝
4.tomcat的設計模式:

  • 門面設計模式:在Request和Response對象封裝、從StandWrapper到ServletConfig封裝、從ApplicationContext到ServletContext封裝中都用到了這種設計模式
  • 觀察者模式:Lifecycle的應用 http://blog.csdn.net/zzhao114/article/details/54772898
  • 命令設計模式:主要作用就是封裝命令,把發出的命令的責任和執行命令的責任分開,也是一種功能分工。在tomcat中命令模式在Connector和Container組件之間體現
  • 責任鏈模式:很多對象由每個對象對其下家的引用而連接起來形成一條鏈,請求在這條鏈上傳遞,直到鏈上的某個對象處理此請求,或者每個對象都可以處理請求,並傳給“下家”,直到最終鏈上每個對象都處理完。應用在Container組件
5.Container中的Pipeline和Valve:

Pipeline和Valve拓展了Container鏈上的功能,使得鏈向下傳遞的過程中,能夠接受外界的干預。Pipeline就是鏈接每個子容器的管子,裏面傳遞的Request和Response對象好比管子裏流的水,而Value就是在這個管子上開的一個個小口子,讓你有機會接觸到裏面的水,做一些額外的事情


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