一直以來都在用java的springmvc,沒有深刻去探究關於spring以及mvc的一些內在的工做過程,今天利用休息時間,仔細閱讀了一下咱們的源碼,並結合搜索引擎,明白了幾個以前解決了問題,還沒理解原理的緣由所在. html
本文將對SpringMVC的理解進行追蹤描述,一來但願你們批評指正,糾正錯誤的理解,二來給本身一個留念,當之後忘記的時候,還有個記錄,能夠再次回想起來,三來總結技術經驗,但願從此的路走的更好.java
早兩天我部署了一個項目,全部的配置都是從公司項目中抽取出來的.公司項目運行得很好,而我本身的項目卻老是404,在這以前,爲了看項目是否部署好,作了個html頁面作靜態資源測試,因而增長了靜態資源配置以下:web
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.html</url-pattern>spring
</servlet-mapping> mvc
項目中有兩個配置文件,一個是MyProject-sevlet.xml,另外一個是ApplicationContext-Services.xmlapp
在web.xml中配置是這樣的webapp
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/conf/ApplicationContext-Services.xml</param-value>
</context-param> jsp
<servlet>
<servlet-name>MyProject</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/conf/MyProject-servlet.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>測試
註解驅動<mvc:annotation-driven/>是寫在ApplicationContext-Services.xml,而不是MyProject-sevlet.xml,不管怎麼訪問jsp頁面,都是404 ,後來發現,只要在MyProject-sevlet.xml加上<mvc:annotation-driven/>就能正常訪問.猜測應該是沒有優先加載ApplicationContext-Services.xml所致使的問題,但奇怪的是,公司項目配置文件就是這麼寫的,也沒有其餘特殊的配置,爲何那個項目能優先記載這個配置呢? 查資料說是由於增長了default這個servlet配置,但感受解釋的不夠通透,不能徹底理解,但願各位大神指點迷津.ui
另外,從application來講,使用WebApplicationContextUtils對象時,發現它有findWebApplicationContext,getRequiredWebApplicationContext,getWebApplicationContext,initServletPropertySources,registerEnvironmentBeans,registerWebApplicationScopes等方法
經過查閱相關資料,總結以下
findWebApplicationContext實際上最終也是調用getWebApplicationContext方法,來獲取webapplicationcontext
initServletPropertySources在spring classloader類初始化的時候被調用,用於初始化servlet配置參數
其餘方面的總結後續再補充,敬請期待