1. 程式人生 > >springMVC之WebApplicationContext、DispatcherServlet與web容器的ServletContext

springMVC之WebApplicationContext、DispatcherServlet與web容器的ServletContext

用spring框架開發web應用少不了理解WebApplicationContext、DispatcherServlet與web容器的ServletContext關係。

發現很多貼子,分析了程式碼,寫了一大堆關係,最後還是讓人看的雲裡霧裡的。 我相信,一個產品的基本設計思路都是簡單明瞭的,在這個指導下,才寫出了複雜的程式碼。 分析程式碼最後應該回歸到作者的原始思路,這樣才能知其然,又知其所以然。

具體程式碼不貼了,總結如下:

1.web容器可以說就是Servlet容器:ServletContext,啟動tomcat必然有這個。web.xml中配置有具體的Servlet,這些都會放在Servlet容器中。

  1. dispatcherServlet只是一個具體的Servlet,必然裝在Servlet容器裡。當然Servlet容器可以裝其它任何Servlet,不一定必須有dispatcherServlet。

  2. WebApplicationContext是IOC容器,裡面是裝spring的依賴注入產生的各種bean元件的。可以說與上面的Servlet容器及具體的Servlet沒有任何直接聯絡。通常的IOC容器本來就不僅是給web應用用的。

  3. 但是web應用中具體的Servlet處理業務中一般都會使用IOC容器裡的元件,所以兩個容器之間要有直接引用關係。但是兩個容器裡的具體內容不應該有直接的引用關係。如同你跨部門協調的時候,總要找他們的領導,不會直接找具體的人員。

  4. 所以WebApplicationContext容器會放在ServletContext容器中,這個過程是web.xml中的監聽器,監聽Servlet容器的啟動過程中,先產生IOC容器,並放置在ServletContext裡面的。

  5. 如果是做其它java應用,可以使用其它IOC容器,比如ApplicationContext (ClasspathXmlApplicationContext,FileSystemXmlApplicationContext),可以在你啟動自己應用的時候初始化這個IOC容器物件,並放在一個全域性的地方引用著。其它程式碼就可以從IOC裡取自己要的元件了。