一文懂SSM項目中的web.xml常用配置項


做web后端工程師,逃不過的web.xml,我們都知道配置這個文件是日常工作了,那么我們來把一些必須知道知識點梳理下。

    我們把web項目啟動的時候,首先加載的就是web.xml這個文件,只有這個文件所有的配置信息沒錯之后,web項目才算真正地跑起來。

    那么我們一起打開web.xml的配置信息的大門吧。

 

首先,我們需要肯定一個整體的信息的就是,無論的web.xml里面的配置信息順序是怎么樣,我們的執行順序是不會按照你寫在文件中的配置順序執行的,web.xml有自己的執行順序

 

初始化過程:

  1. 在啟動Web項目時,容器(比如Tomcat)會讀web.xml配置文件中的兩個節點<listener>和<contex-param>。
  2. 接着容器會創建一個ServletContext(上下文),應用范圍內即整個WEB項目都能使用這個上下文。
  3. 接着容器會將讀取到<context-param>轉化為鍵值對,並交給ServletContext。
  4. 容器創建<listener></listener>中的類實例,即創建監聽(備注:listener定義的類可以是自定義的類但必須需要繼承ServletContextListener)。
  5. 在監聽的類中會有一個contextInitialized(ServletContextEvent event)初始化方法,在這個方法中可以通過event.getServletContext().getInitParameter("contextConfigLocation") 來得到context-param 設定的值。在這個類中還必須有一個contextDestroyed(ServletContextEvent event) 銷毀方法.用於關閉應用前釋放資源,比如說數據庫連接的關閉。
  6. 得到這個context-param的值之后,你就可以做一些操作了.注意,這個時候你的WEB項目還沒有完全啟動完成.這個動作會比所有的Servlet都要早。

而同個類型下的執行順序是根據對應的mapping的信息執行的

    依照xml的執行順序,我們來依次了解一下各個執行順序的標簽是什么意思

值得我們注意的是,web項目在啟動的時候,容器(Tomcat)會創建一個域對象ServletContext,我們先簡單介紹一下

ServletContext

這個官方的解釋是servlet上下文,啟動的時候,服務器會給每一個工程創建一個對象,這個對象就是ServletContext對象,且這個對象是全局唯一。而且整個工程內的servlet都共享這個對象。

首先我們先記住,ServletContext是一個域對象,不要急,這就給你介紹一下域對象

 

 

通過上圖,相信你可以明白域對象是在這次充當什么角色的

    那么究竟域對象究竟是什么呢

    域對象是服務器在內存上創建的存儲空間,用於不同動態資源(servlet)之間傳遞與共享數據

凡是域對象都有以下的三個方法

SetAttribute(name,value)

往域對象里面添加數據,添加時以key-value形式添加

GetAttribute(name);

根據指定的key讀取域對象里面的數據

RemoveAttribute(name)

根據指定的key從域對象里面刪除數據

相信看到這里,不少打過代碼的童鞋已經了解到了域對象究竟是啥東西了,SetAttribute這些方法,我們在往域對象傳數據的時候,是經常使用的。

 

那么接下來我們就可以來了解一下

context-param 

作用:該元素用來聲明應用范圍(整個WEB項目)內的上下文初始化參數。

在里面有param-name跟param-value

param-name 設定上下文的參數名稱。必須是唯一名稱

param-value 設定的參數名稱的值

把這個信息讀取完成之后,我們是轉化為鍵值對的,交給了ServletContext

 

按照順序,我們接下來需要了解的是Listener

 

Listener翻譯過來就是監聽器,顧名思義就是用來監聽我們web活動的,這個很好理解,servlet一共提供了八個監聽器

 

三個域對象的創建和銷毀監聽器

對象類型

對應的監聽器

ServletContext

ServletContextListener

HttpSession

HttpSessionListener

HttpServletRequest

HttpServletRequestListener

 

監聽三個對象的屬性變更的監聽器(屬性添加,屬性移除,屬性替換

對象類型

對應的監聽器

ServletContext

ServletContextAttributeListener

HttpServletRequest

ServletRequestAttributeListener

HttpSession

HttpSessionAttributeListener

 

監聽HttpSession對象中的JavaBean的狀態的改變(綁定,解除綁定,鈍化和活化)

 

對象類型

對應的監聽器

HttpSession

HttpSessionBindingListener(綁定,解除綁定)

HttpSession

HttpSessionActivationListener(鈍化和活化)

 

那么關於監聽的介紹就到這里,深入的內容我會寫另外一篇博客給大家深入介紹

 

接下來是關於filter也就是過濾器,過濾器顧名思義就是用來過濾一些需要的信息

 

filter

過濾器實際上就是對web提交過來的數據,對服務器處理的信息,進行再交付給對方。你可以理解為一個中間加工處理的地方。

    通常都是用來攔截request,和response進行攔截過濾處理

通過上圖,我們可以更直觀地了解到過濾器的工作角色,值得我們注意的是,過濾器可能會有多個,經過過濾器一過濾完之后,還需要通過濾器二進行過濾處理,因為每個過濾器都有自己特定的過濾功能

 

關於多個過濾器的執行順序,我們請求到達Servlet之間是可以經過多個過濾器的,這些過濾器的執行順序是依賴於<filter-mapping>里面配置的順序。

 

servlet 

servlet全稱Java Servlet,是用Java編寫的服務端程序,其主要功能在於交互式地瀏覽和修改數據,生成動態Web內容。

在web.xml這里主要是將你所寫的servlet對應的類配置到當中去,具體的servlet的詳解可以看我關於servlet詳解的文章


免責聲明!

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



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