eclipse : java項目中的web.xml( Deployment Descriptor 部署描述文件 )配置說明


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

配置的是整個web應用的上下文初始化參數。 
 <context> <param-name></param-name> <param-value></param-value> </context>

如果想要獲得參數值,可以在servlet中調用: 
(1) getServletContext.getInitParameter(“”); 
(2) getServletConfig().getServletContext().getInitParameter(); 
在web應用部署完成以后,值沒法改變。

listener

<listener>

<listener-class></listener-class>

</listener>

web容器自己會根據listener-class中的類implements什么類型的接口進行判斷。 

filter

 <filter> <filter-name></filer-name> <filer-class></filer-class> <init-param> <param-name></param-name> <param-value></param-value> </init-param> </filter> <filer-mapping> <filer-name></filer-name> <url-pattern></url-pattern> </filer-mapping> 
  • filer 有兩個配置節點:filer和filer-mapping,其中對應的filer-mapping必須在filer配置節點配置完成后才能進行配置。而filer-mapping的映射可以根據:url-pattern,類似於servlet-mapping。或者直接使用。

servlet

 <servlet> <servlet-name></servlet-name> <servlet-class></servlet-class> <init-param> <param-name></param-name> <param-value></param-value> </init-param> <init-param> <param-name></param-name> <param-value></param-value> </init-param> <load-on-startup></load-on-startup> </servlet> <servlet-mapping> <servlet-name></servlet-name> <url-pattern></url-pattern> </servlet-mapping> 
  •  init-param:配置的key/value會被設置到該servlet對應的servletConfig對象。注意:不同於ServletContxt,每個servlet 

都會有自己的servletConfig。部署完成后,參數值不能變。 
  load-on-startup:用來確定servlet的加載時間。如果未設置或者為負數,則在該servlet對應的第一個用戶請求到來時,才加載servlet類,並調用init()。如果為正數或者0,則在web應用部署后就加載servlet。其數字的大小又標識了加載的順序,值越小越早被加載,如果值相等,就先在web.xml聲明的先加載。

session-config (會話超時設置,單位分鍾)

 <session-config> <session-timeout></session-timeout> </session-config>
  • 如果某個會話在一定時間內未被訪問,服務器可以拋棄它以節省內存。 可通過使用HttpSession的setMaxInactiveInterval方法明確設置單個會話對象的超時值(此時單位是秒),或者可利用session-config元素制定缺省超時值(此時單位是分支)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM