當我們爲自己的Web應用而改動Tomcat中conf/server.xml,可以不錄入項目路徑就可以訪問應用.
但是更改完畢後,啓動Tomcat會發現一種現象就是重複加載Spring配置文件。
現象:
控制檯端會輸出日誌:
配置:
原server.xml配置
Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> </Host>
改動後server.xml配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="" docBase="frms4j" reloadable="true"/> </Host>
原理:
在Web環境裏,會使用ContextLoader構造ApplicationContext後,壓進Servlet Context。
然後在Jsp/Servelet中,可以通過Servlet Context取得ApplicationContext:
ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(application);
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> </Host>
<Host name="localhost" appBase="newWebapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="" docBase="../webapps/frms4j" reloadable="true"/> </Host>優點:不影響Eclipse的集成部署
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="" docBase="../myapps/frms4j" reloadable="true"/> </Host>
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="" docBase="/myapp/frms4j" reloadable="true"/> </Host>