servlet路徑映射中的完全路徑匹配、目錄匹配、擴展名匹配


在servlet路徑映射中,關於url-pattern的配置有三種,分別是完全路徑匹配、目錄匹配、擴展名匹配

其優先級分別為:完全路徑匹配>目錄匹配>擴展名匹配;

 

 

一、三種路徑印射的區別

在服務器段的java代碼是:

package servlet0917;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class servlet01 extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doget方法被調用");
    }
}

 1、完全路徑代碼:

<servlet>
        <servlet-name>servlet01</servlet-name>
        <servlet-class>servlet0917.servlet01</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>servlet01</servlet-name>
        <url-pattern>/servlet/servlet01</url-pattern>
    </servlet-mapping>
    

 

訪問結果:

   

訪問路徑:http://localhost:8080/servlet/servlet01

這種模式也叫完全模式匹配。

 

2、目錄匹配也叫通配符匹配

(1、)web端代碼:

    <servlet>
        <servlet-name>servlet01</servlet-name>
        <servlet-class>servlet0917.servlet01</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>servlet01</servlet-name>
        <url-pattern>/servlet/*</url-pattern>
    </servlet-mapping>

 訪問路徑可以有多個選擇:如下圖

 

當servlet中的路徑映射為<url-pattern>/servlet/*</url-pattern>,從字面意思也可以理解出servlet后面跟的是一個整目錄,目錄可以隨意訪問的。

(2)既url路徑中直接是/*

    <servlet>
        <servlet-name>servlet01</servlet-name>
        <servlet-class>servlet0917.servlet01</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>servlet01</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

其訪問路徑沒有限制,訪問路徑可以是任何字符與數字,這里就不向大家一一展示了。

 

3、后綴名匹配,不能以/開頭,要以*開頭,比如 *.do

web端代碼:

    <servlet>
        <servlet-name>servlet01</servlet-name>
        <servlet-class>servlet0917.servlet01</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>servlet01</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

 在訪問路徑時,其*可以換成任何字符與數字:如下圖所示

 

 

 二:印射路之間的優先級

先定義兩個servlet文件,如圖所示,這里就不像大家展示其代碼了

1、web端代碼:比較/abc/*與/*的優先級,結論:如果同樣目錄匹配,限定范圍越緊准,越先被匹配

 <servlet>
        <servlet-name>servlet01</servlet-name>
        <servlet-class>servlet0917.servlet01</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>servlet01</servlet-name>
        <url-pattern>/abc/*</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>servlet02</servlet-name>
        <servlet-class>servlet0917.servlet02</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>servlet02</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

 

2、端口代碼:/abc/*與/abc比較,先被訪問的是完全路徑匹配,其次才是目錄匹配(ps:目錄匹配大多都帶有*)

<servlet>
        <servlet-name>servlet01</servlet-name>
        <servlet-class>servlet0917.servlet01</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>servlet01</servlet-name>
        <url-pattern>/abc/*</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>servlet02</servlet-name>
        <servlet-class>servlet0917.servlet02</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>servlet02</servlet-name>
        <url-pattern>/abc</url-pattern>
    </servlet-mapping>

 訪問結果:

 

3、用目錄路徑/abc/*與擴展名*.do訪問,結果是目錄路徑先被訪問

<servlet>
        <servlet-name>servlet01</servlet-name>
        <servlet-class>servlet0917.servlet01</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>servlet01</servlet-name>
        <url-pattern>/abc/*</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>servlet02</servlet-name>
        <servlet-class>servlet0917.servlet02</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>servlet02</servlet-name>
        <url-pattern>*.do</url-pattern>d
    </servlet-mapping>

 訪問結果:

 

4、web端代碼:/*與*.do,先被訪問的還是目錄路徑,

<servlet>
        <servlet-name>servlet01</servlet-name>
        <servlet-class>servlet0917.servlet01</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>servlet01</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>servlet02</servlet-name>
        <servlet-class>servlet0917.servlet02</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>servlet02</servlet-name>
        <url-pattern>*.do</url-pattern>d
    </servlet-mapping>

訪問結果:

 


免責聲明!

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



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