web.xml文件大概一年前半年前就開始接觸了,但一直沒有引起重視,究其原因有二。其一,對.xml文件不熟,且并沒有多余的精力去弄透,其二servlet即使不在web.xml文件中注冊也能訪問,反而可能因為注冊了又注冊錯了而不能訪問。基于此兩個原因,也就一直沒關注web.xml文件。這一情況在今天的得到了改變。
具體是這樣的,昨天開始我集成了idea和Tomcat的Java web開發環境,當時啟動服務器就發生了一個問題,后臺資源沒法訪問,即servlet路徑錯誤,報404錯誤,沒法找到資源,最后通過分析得出兩個結論:1、首頁即index.html文件在服務器根目錄下,而編譯后的servlet的也在根目錄下,而之前的路徑卻是多了個項目名,于是去掉項目名就可以了。那現在這里就有個問題了,為什么之前加項目名可以呢?現在想起來主要還是當時eclipse和Tomcat集成出了問題,eclipse僅僅起了開啟Tomcat的作用,沒有修改配置文件,導致整個項目的訪問都是要加上項目名的。
而今天呢,由于修改了編譯文件的路徑,訪問出錯了,這實在令我無法忍受,于是索性將web.xml文件配置好一勞永逸。下面我將具體分享下我對web.xml注冊servlet的理解。
上面是我注冊的一個servlet實例,我會按照前后臺交互的次序分解這段實例,首先由于這個servlet是用來處理用戶注冊的手機號碼是否有重復的,所以當用戶注冊填入手機號符合格式時會出發一個事件,該事件會通過瀏覽器發送一個url請求,服務器接收到請求就會分解url,域名或者IP加端口為一個部分,不在本次討論重點,端口號后面又是一部分,這一部分首先會與web.xml文件的servlet標簽下的url-pattern子標簽的值進行匹配,匹配成功就會通過servlet-name(servlet映射的名字)找到servlet-class(servlet所在的包加類名),然后servlet就會正常處理該請求了。如果沒有找到匹配的url-pattern呢,那么服務器還會做一次嘗試,直接匹配servlet的映射名字,如果還是找不到就會向瀏覽器端返回我們常見的404錯誤。有必要說明——不管是servlet映射還是web.xml注冊servlet都是為了安全。