servlet規範不只規範了servlet自身處理web請求的通用邏輯過程,
還規範了web服務器管理servlet的通用步驟。html
爲了使得咱們開發的Java web 應用能在多種多樣的 Java web服務器上運行,而不用作代碼上的修改,根據servlet規範Java web應用在服務器中部署時的目錄結構應該以下:java
– 應用程序根目錄 – |-- WEB-INF目錄:必須目錄,外界不可訪問 – |-- web.xml:Web應用部署描述文件,必須 – |-- classes目錄:應用處理邏輯代碼,編譯過的字節碼文件 – |-- lib目錄:第三方類庫文件 – |-- TLD文件:標籤庫描述文件 – |-- META-INF目錄:必須目錄,外界不可訪問 – |-- context.xml – |-- 其餘文件:JSP、HTML、CSS、JavaScript、圖片等,外界可直接訪問
你在WEB服務器的應用目錄下部署了你的web應用,等待服務器啓動:
一、web服務器啓動的時候會爲其應用目錄下的各個應用進行初始化,依據就是WEB-INF下的web.xml。web
二、首先標識應用適用的servlet規範數據庫
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
三、而後逐個解析web.xml中的標籤:apache
容器對於web.xml的加載過程是context-param >> listener >> fileter >> servlet瀏覽器
初始化過程:服務器
<filter>和<filter-mapping>:過濾器(加工類),是說session
filter代表本應用編寫了哪些加工類,每一個類有哪些參數
filter-mapping規定了一個url由哪些加工類進行處理的規則。一個url請求或響應可被多個加工類依次加工
app
<servlet>:告訴服務器這個應用寫了哪些servlet,每一個servlet的名字,對應的class全路徑名,啓動時服務器是否對他進行實例化,實例化時有哪些參數
url
<servlet-mapping>:告訴服務器根據請求的Url找哪一個servlet來處理的規則,多個url能夠由同一個servlet來處理,url的模式能夠進行通配表示。
對於以下的一些映射關係: Servlet1 映射到 /abc/* Servlet2 映射到 /* Servlet3 映射到 /abc Servlet4 映射到 *.do 問題: 當請求URL爲「/abc/a.html」,「/abc/*」和「/*」都匹配,哪一個servlet響應 Servlet引擎將調用Servlet1。 當請求URL爲「/abc」時,「/abc/*」和「/abc」都匹配,哪一個servlet響應 Servlet引擎將調用Servlet3。 當請求URL爲「/abc/a.do」時,「/abc/*」和「*.do」都匹配,哪一個servlet響應 Servlet引擎將調用Servlet1。 當請求URL爲「/a.do」時,「/*」和「*.do」都匹配,哪一個servlet響應 Servlet引擎將調用Servlet2。 當請求URL爲「/xxx/yyy/a.do」時,「/*」和「*.do」都匹配,哪一個servlet響應 Servlet引擎將調用Servlet2。 匹配的原則就是"誰長得更像就找誰"
session-config:設置多久時間內還認得你
mime-mapping: 告訴瀏覽器返回的文件的具體類型,讓瀏覽器能正確選擇處理程序
welcom-file-list: 默認處理文件
error-page :告訴服務器對某些異常的HTTP狀態碼,或特定類型異常被拋出時,要顯示的頁面的規則
四、解析完畢就等着瀏覽器端的請求咯,來一個請求就新開個線程,根據url模式找處處理其的servlet,封裝好請求對象(若是有加工類就先加工)、響應對象做爲參數調用servlet的service方法,將得到的響應返回給瀏覽器。
按照部署目錄和web.xml元素知識,相信你能夠開始進行Java web 開發了吧!
感謝! 參考文:
http://www.cnblogs.com/xdp-gacl/p/3760336.html
http://www.ibm.com/developerworks/cn/java/j-lo-servlet/
http://www.cnblogs.com/chinafine/archive/2010/09/02/1815980.html