context-param、listener、filter、servlet
首先可以肯定的是,加載順序與它們在 web.xml 配置文件中的先后順序無關。即不會因為 filter 寫在 listener 的前面而會先加載 filter。最終得出的結論是: listener -> filter -> servlet
同時還存在着這樣一種配置節:context-param,它用於向 ServletContext 提供鍵值對,即應用程序上下文的初始化參數。我們的 listener, filter 等在初始化時會用到這些上下文中的信息,那么 context-param 配置節是不是應該寫在 listener 配置節前呢?實際上 context-param 配置節可寫在任意位置。但是,真正的加載順序為:context-param -> listener -> filter -> servlet
對於某一類配置節點的多個配置項來說,則與它們出現的順序是有關的。以 filter 為例,web.xml 中當然可以定義多個 filter,與 filter 相關的一個配置節點是 filter-mapping,這里一定要注意,對於擁有相同 filter-name 的 filter 和 filter-mapping 配置節而言,filter-mapping 必須出現在 filter 之后,否則當解析到 filter-mapping 時,它所對應的 filter-name 還未定義。web 容器啟動時初始化每個 filter 時,是按照 filter 配置節出現的順序來初始化的,當請求資源匹配多個 filter-mapping 時, filter 攔截資源是按照 filter-mapping 配置節出現的順序來依次調用 doFilter() 方法的。
servlet 同 filter 類似 ,此處不再贅述。
由此,可以看出,web.xml 的加載順序是: context-param -> listener -> filter -> servlet ,而同個類型之間的實際程序調用的時候的順序是根據對應的 mapping 的順序進行調用的
context-param
如果想要獲得參數值,可以在servlet中調用:
(1) getServletContext.getInitParameter(“”);
(2) getServletConfig().getServletContext().getInitParameter();
在web應用部署完成以后,值沒法改變。
listener
<listener>
<listener-class></listener-class>
</listener>
filter
- filer 有兩個配置節點:filer和filer-mapping,其中對應的filer-mapping必須在filer配置節點配置完成后才能進行配置。而filer-mapping的映射可以根據:url-pattern,類似於servlet-mapping。或者直接使用。
servlet
- init-param:配置的key/value會被設置到該servlet對應的servletConfig對象。注意:不同於ServletContxt,每個servlet
都會有自己的servletConfig。部署完成后,參數值不能變。
load-on-startup:用來確定servlet的加載時間。如果未設置或者為負數,則在該servlet對應的第一個用戶請求到來時,才加載servlet類,並調用init()。如果為正數或者0,則在web應用部署后就加載servlet。其數字的大小又標識了加載的順序,值越小越早被加載,如果值相等,就先在web.xml聲明的先加載。
session-config (會話超時設置,單位分鍾)
- 如果某個會話在一定時間內未被訪問,服務器可以拋棄它以節省內存。 可通過使用HttpSession的setMaxInactiveInterval方法明確設置單個會話對象的超時值(此時單位是秒),或者可利用session-config元素制定缺省超時值(此時單位是分支)。