1. 程式人生 > >JAVAWEB學習(4) — 處理請求資源路徑

JAVAWEB學習(4) — 處理請求資源路徑

Servlet 容器如何處理請求資源路徑

1. 什麼是請求資源路徑

在瀏覽器位址列輸入:http://ip:port/appName/xxx.html

其中 /appName/xxx.html 就是請求資源路徑

容器預設認為訪問的是一個servlet,所以,會檢視web.xml配置,看有沒有匹配的servlet

2. Web伺服器對請求路徑的處理過程

在瀏覽器位址列輸入:http://ip:port/appName/xxx.html

  1. 瀏覽器依據ip,port建立與Servlet容器之間的連線,然後將請求資源路徑/appName/xxx.html 傳送過去給容器
  2. 容器依據應用名“/appName”找到應用所在的資料夾,容器會預設請求的是一個Servlet,查詢web.xml檔案中所有的Servlet配置“”,看是否有匹配的<url-pattern>
  3. 找到匹配的值之後再按照<servlet-name>完成對應關係的查詢,進而找到要執行的Servlet
  4. 如果沒有查詢匹配的servlet,容器會查詢對應位置的檔案
  5. 如果沒有找到對應位置的檔案就會返回404錯誤

3. 匹配servlet的規則

  • 精準匹配

    具體資源名稱與web.xml檔案中的url-pattern嚴格匹配相等才執行

    <servlet>
        <servlet-name>someServlet</servlet-name>
        <servlet-class>test.MyServlet</
    servlet-class
    >
    </servlet> <servlet-mapping> <servlet-name>someServlet</servlet-name> <url-pattern>/abc.html</url-pattern> </servlet-mapping>
  • 萬用字元匹配

    使用"*"匹配一個或者多個任意的字元

    <servlet>
        <servlet-name>someServlet</servlet-name>
        <
    servlet-class
    >
    test.MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>someServlet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping>
  • 字尾匹配

    在配置url-pattern節點時,不使用斜槓開頭,用“*.”開頭來匹配任意多個字元

    <servlet>
        <servlet-name>someServlet</servlet-name>
        <servlet-class>test.MyServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>someServlet</servlet-name>
        <!-- 會匹配所有以.do結尾的請求 -->
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    

優先順序最高的是 精確匹配

4. 如何讓一個Servlet處理多種請求

  1. 採用字尾匹配

    <servlet>
        <servlet-name>someServlet</servlet-name>
        <servlet-class>test.MyServlet</servlet-class>
    </servlet>
    <servlet-mapping>
       <servlet-name>SomeServlet</servlet-name>
       <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    
  2. 分析請求資源路徑,進行相應的處理