web.xml的載入過程配置詳解
web.xml載入spring配置檔案的方式主要依據該配置檔案的名稱和存放的位置不同來區別,目前主要有兩種方式。
1.如果spring配置檔案的名稱為applicationContext.xml,並且存放在WEB-INF/目錄下,那麼只需要在web.xml中加入以下程式碼即可
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
該監聽器會自動掃描WEB-INF/ 下的applicationContext.xrnl 檔案,這種方式多數用在只有一個配置檔案的情況下。
還可以使用Spring的ContextLoaderServlet的這個特殊Servlet,實現程式碼如下:
<!--spring3.0之後不再支援此種方式,所以推薦使用上面那種方式--> <servlet> <servlet-name>context</servlet-name> <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-name> <load-on-startup>1(比較小的數字就可以)</load-on-startup> </servlet>
上面的兩種方式都可以,不過二者有一些區別。
2.如果spring配置檔案的名稱是自定義的其他名稱,比如為applicationContext-test.xml,也還是存放在WEB-INF/目錄下,那麼還需要配置contextConfigLocation這個引數,該引數是一個字串,監聽器或者Servlet會自定將該字串按照特定的字元(比如空格、逗號、分號)解析成多個檔案。需要新增如下程式碼:
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/application-testA.xml,/WEB-INF/application-testB.xml,/WEB-INF/application-testB.xml</param-value> </context-param>
如果上面嫌得麻煩,可以使用萬用字元對上面進行簡寫如下
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/application*.xml</param-value> </context-param>
然後再加入以上的監聽器或者servlet程式碼就可以。
3.如果既沒有applicationContext.xml 檔案,也沒有使用contextConfigLocation引數確定配置檔案,或者contextConfigLocation確定的配置檔案不存在。都將導致Spring 無法載入配置檔案或無法正常建立ApplicationContext 例項.