2016-01-07 51 views
0

想知道在實時環境中創建了多少個調度器sevlet實例。當有多個請求到達應用程序時。並且如果spring創建單例對象,那麼一個對象如何處理多個請求?當發生這種情況時會發生什麼許多人訪問該網站,因爲dispatcherServlet對象只有一個,所有請求都由同一個對象處理,不會造成任何性能問題?......請澄清它是否與這個概念混淆。或者建議我理解這本書?請求如何被dispacther servlet處理?

+0

一個servlet將它們全部統治......爲什麼單個實例無法處理多個請求,您只需確保它是線程安全的(即不共享狀態)即可。 –

+0

感謝您的回答,但我仍然感到困惑不會有任何性能問題,當有很多人訪問網站和不同的線程,由cotainer創建所有指向相同dispacherServlet對象?...請澄清此 –

+0

號爲什麼做你認爲這是一個問題,只要沒有狀態,一個對象完全有能力被多個線程使用(每個請求由不同的線程處理)。所以不會有任何問題(除非你添加'synchronized'方法等)。 –

回答

1

正如M. Deinum所說,一個servlet來統治他們。我將嘗試提供對ServletDispatcher生命週期的非常一般的描述。

enter image description here

  1. 當請求離開它承載着從用戶信息的瀏覽器。這轉到DispatcherServlet前端控制器,它是將請求委託給其他組件的單個servlet

  2. DispatcherServlet的工作是將請求發送到右側控制器。由於應用程序可以有多個控制器DispatcherServlets獲得幫助,通過諮詢處理程序映射

  3. 決定將其發送到一個

    的DispatcherServlet將請求發送到目的地控制器

  4. 控制器打包模型數據並標識顯示輸出的視圖的名稱並將其發送回分派rservlet。

  5. 的DispatcherServlet諮詢誰與的ViewResolver並查找其被設置爲顯示的數據的圖。

  6. 查看是通過使用模型數據生成輸出來實現的(例如通過JSP)。哪些被髮回給客戶端。

這一切都發生得很快(ms),這意味着可以在很短的時間內處理數千個請求。

+0

非常感謝您的精彩解釋。我對流程有了一些想法,但是如果dispactherServlet只有一個對象並且它會有一些內存位置,我會感到困惑。由於大量的應用程序來到應用程序,每個線程都會嘗試訪問相同的內存位置。所以它會被應用程序處理。它一次可以訪問多個線程嗎?它不會產生任何性能問題嗎?....提前致謝 –