需要了解兩個概念:
1、servletcontext :是web專案的上下文,可以理解為整個web應用的全域性變數,專案中所有的方法可以獲取servletcontext。
springmvc web專案,web容器啟動會主動載入web.xml檔案,以下貼出web.xml檔案內容。
以tomcat舉例,啟動tomcat之後,首先會載入web.xml檔案:
a)容器首先讀取web.xml中的的配置內容和標籤中配置項;
b)緊接著例項化servletcontext物件,並將配置的內容轉化為鍵值傳遞給servletcontext;
c)建立配置的***的類例項,並且啟動監聽;
d)隨後呼叫listener的contextinitialized(servletcontextevent args)方法,servletcontext = servletcontextevent.getservletcontext(); 此時你可以通過servletcontext獲取context-param配置的內容並可以加以修改,此時tomcat還沒完全啟動完成。
e)後續載入配置的各類filter;
f)最後載入servlet;
最後的結論是:web.xml中配置項的載入順序是context-param=>listener=>filter=>servlet,配置項的順序並不會改變載入順序,但是同型別的配置項會應該載入順序,servlet中也可以通過load-on-startup來指定載入順序。
通過以下web.xml的配置我們可以看到,初始化載入context-param時,我們可以把配置引數或者配置檔案載入到全域性servletcontext(鍵值對形式)中。之後載入所有配置的***,並啟動***的例項。在***建立例項完成後,會載入servletcontext中的配置,如果是配置檔案則會讀取檔案,實現配置檔案的功能(如註解掃瞄,bean注入,資料來源配置等),如:配置檔案中指定註解掃瞄的範圍,在**controller中新增@controller的註解,從而dispatcherservlet可以實現呼叫分發的功能。也可以配置一些其他的注入或者驅動。 之後會去載入過濾器,實現過濾器的功能,最後載入servet配置,做對應的配置處理。啟動順序(http請求順序):*** > 過濾器 > ***(context-param-->listener-->filter-->servlet-->interceptor)
contextconfiglocation學海無涯苦作舟log4jconfiglocation
classpath:log4j.properties
org.springframework.web.util.introspectorcleanuplistener
org.springframework.web.context.contextloaderlistener
listener.sessionlistener
encodingfilter
org.springframework.web.filter.characterencodingfilter
encoding
utf-8
forceencoding
true
*.do
sessionfilter
web.filter.sessionfilter
*.do
springmvc
org.springframework.web.servlet.dispatcherservlet
1*.do
web專案啟動,載入過程
第一步 啟動乙個web專案的時候,web容器會去讀取它的配置檔案web.xml,讀取listener和context param兩個結點。web.xml裡可以配置什麼?可以配置過濾器filter,listener,servlet容器,以及web啟動後的首頁。舉例 配置dispatcherservle...
springMVC專案基礎配置載入完成執行事件
在一次開發過程中,提出來這樣乙個需求 需要定時任務執行乙個操作,正常配置了spring的定時任務以後,發現第一次執行也需要等專案跑起來以後的相應的間隔時間才會執行,這樣是不符合應用場景的,真正需求是需要在專案剛剛啟動的時候就執行一次定時任務,然後在接下來,按照spring定時任務的間隔進行執行,那麼...
SpringMVC載入Properties檔案
在看了網上許許多多的總結注入properties檔案,總結一下其中的一種可以成功執行的例子,在多次的嘗試後我覺得有必要總結一下。我的 是把自定義的引數注入到配置類中,然後從配置類中呼叫,如下 在開始之前因為我們要進行測試,所以引入下測試的包 pom.xml檔案如下 junit junit 4.12 ...