亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

當web.xml文件中沒有配置contextClass這個參數時,ServletContext是如何創建application容器的?

protected?Class<?>?determineContextClass(ServletContext?servletContext)?{
???String?contextClassName?=?servletContext.getInitParameter(CONTEXT_CLASS_PARAM);
???if?(contextClassName?!=?null)?{
??????try?{
?????????return?ClassUtils.forName(contextClassName,?ClassUtils.getDefaultClassLoader());
??????}
??????catch?(ClassNotFoundException?ex)?{
?????????throw?new?ApplicationContextException(
???????????????"Failed?to?load?custom?context?class?["?+?contextClassName?+?"]",?ex);
??????}
???}
???else?{
??????contextClassName?=?defaultStrategies.getProperty(WebApplicationContext.class.getName());
??????try?{
?????????return?ClassUtils.forName(contextClassName,?ContextLoader.class.getClassLoader());
??????}
??????catch?(ClassNotFoundException?ex)?{
?????????throw?new?ApplicationContextException(
???????????????"Failed?to?load?default?context?class?["?+?contextClassName?+?"]",?ex);
??????}
???}
}

注:CONTEXT_CLASS_PARAM的值是contextClass,這個參數在web.xml中可以不配置。


正在回答

2 回答

1)web.xml中沒有配置CONTEXT_CLASS_PARAM參數,所有這塊邏輯是走

contextClassName = defaultStrategies.getProperty(WebApplicationContext.class.getName());這塊分支。而這句代碼目的是要構建 【org.springframework.web.context.support.XmlWebApplicationContext】作為 WebApplicationContext 的實現類。具體配置開源可以看defaultStrategies的實例化賦值代碼。

2)后面的內容就過度到XmlWebApplicationContext的創建過程,這必然涉及到如果獲取xml的配置路徑。

2.1 抽象模板類 AbstractRefreshableConfigApplicationContext::getConfigLocations方法中,有這樣的描述 (this.configLocations != null ? this.configLocations : getDefaultConfigLocations());

2.2 那重點就是 this.configLocations 的set 過程。

? ? 在ContextLoader::configureAndRefreshWebApplicationContext的方法中,我們可以找到這樣的代碼

wac.setConfigLocation(configLocationParam); 最終從 String configLocationParam = sc.getInitParameter(CONFIG_LOCATION_PARAM); 這句代碼可以得知它的路徑來源是 web.xml中的配置

<param-name>contextConfigLocation</param-name>。

大體這樣的邏輯,希望可以幫到你。


0 回復 有任何疑惑可以回復我~

...

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

當web.xml文件中沒有配置contextClass這個參數時,ServletContext是如何創建application容器的?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號