servlet虛擬路徑映射


在web.xml文件中,一個<servlet-mapping>元素用於映射一個Servlet的對外訪問路徑,該路徑也稱為虛擬路徑。例如<url-pattern>/TestServlet</url-pattern>,其中“/TestServlet”就是一個虛擬路徑。創建的Servlet只有在web.xml中映射了虛擬路徑,客戶端才能訪問。但是,在映射Servlet時,有一些細節問題需要注意,比如Servlet的多重映射,在映射路徑中使用通配符等,接下來,針對這些問題進行詳細解釋,具體如下:
(1)Servlet的多重映射
Servlet的多重映射是指同一個Servlet可以被映射成多個虛擬路徑,即客戶端可以通過多個路徑訪問同一個Servlet,具體如下:

可以在<servlet-mapping>標簽中配置多個<url-pattern>標簽,

如例1-7所示:

<servlet-mapping>

<servlet-name>AServlet</servlet-name>

<url-pattern>/AServlet</url-pattern>

<url-pattern>/BServlet</url-pattern>

</servlet-mapping>

如例1-7所示,AServlet配置了多個url-pattern,在瀏覽器端地址欄通過http://localhost:8080/Example13/AServlet和http://localhost:8080/Example13/BServlet都能夠過訪問到AServlet。但是這種配置方式,現在開發基本不用了,大家了解即可。

(2)映射路徑中使用通配符有時候,我們希望某個目錄下的所有路徑都可以訪問同一個Servlet,這時,可以在Servlet映射的路徑中使用通配符”*”。如下所示:
1)<url-pattern>/servlet/*</url-pattern>

這種屬於路徑匹配,通配符”*”為后綴,/servlet/a、/servlet/b都與/servlet/*匹配。

2)<url-pattern>*.do</url-pattern>

這種屬於擴展名匹配,通配符”*”為前綴,/abc/a.do、/a.do都與*.do匹配。

3)<url-pattern>/*</url-pattern>

這種屬於完全匹配,通配符”*”為后綴,匹配所有路徑。需要注意的是:
通配符要么在開頭,要么在結尾,不能在中間,<url-pattern>/*.do</url-pattern>就
是錯誤的使用。
如果不使用通配符,那么<url-pattern>的內容必須以”/”開頭,
<url-pattern>abc</url-pattern>就是錯誤的。
三種通配符匹配方式的優先級是匹配的范圍越大優先級越低。如1-8所示:
例1-8匹配優先級
<servlet>
<servlet-name>hello1</servlet-name>

<servlet-class>cn.itcast.servlet.Hello1Servlet</servlet-class>

</servlet>

<servlet-mapping>
<servlet-name>hello1</servlet-name>

<url-pattern>/servlet/hello1</url-pattern>

</servlet-mapping>

<servlet>
<servlet-name>hello2</servlet-name>
<servlet-class>cn.itcast.servlet.Hello2Servlet</servlet-class>

</servlet>
<servlet-mapping>
<servlet-name>hello2</servlet-name>

<url-pattern>/servlet/*</url-pattern>

</servlet-mapping>
根據例1-8的配置,當在瀏覽器端訪問http://localhost:8080/Example13/servlet/hello1時,hello1和hello2都能夠匹配,但是由於hello1匹配的更加准確,范圍更小,所以訪問的是hello1這個Servlet。


免責聲明!

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



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