教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

Java培訓(xùn)之Servlet虛擬路徑映射

更新時間:2016年04月26日15時50分 來源:傳智播客Java培訓(xùn)學(xué)院 瀏覽次數(shù):

在web.xml文件中,一個<servlet-mapping>元素用于映射一個Servlet的對外訪問路徑,該路徑也稱為虛擬路徑。例如<url-pattern>/TestServlet</url-pattern>,其中“/TestServlet”就是一個虛擬路徑。創(chuàng)建的Servlet只有在web.xml中映射了虛擬路徑,客戶端才能訪問。但是,在映射Servlet時,有一些細(xì)節(jié)問題需要注意,比如Servlet的多重映射,在映射路徑中使用通配符等,接下來,針對這些問題進(jìn)行詳細(xì)解釋,具體如下:
(1)Servlet的多重映射
Servlet的多重映射是指同一個Servlet可以被映射成多個虛擬路徑,即客戶端可以通過多個路徑訪問同一個Servlet,具體如下:
可以在<servlet-mapping>標(biāo)簽中配置多個<url-pattern>標(biāo)簽,如例1-7所示:
  <servlet-mapping>
    <servlet-name>AServlet</servlet-name>
    <url-pattern>/AServlet</url-pattern>
    <url-pattern>/BServlet</url-pattern>
  </servlet-mapping> 
如例1-1所示,AServlet配置了多個url-pattern,在瀏覽器端地址欄通過http://localhost:8080/Example13/AServlet和http://localhost:8080/Example13/BServlet都能夠過訪問到AServlet。但是這種配置方式,現(xiàn)在開發(fā)基本不用了,大家了解即可。
(2)映射路徑中使用通配符
有時候,我們希望某個目錄下的所有路徑都可以訪問同一個Servlet,這時,可以在Servlet映射的路徑中使用通配符”*”。如下所示:
  1. <url-pattern>/servlet/*</url-pattern>
這種屬于路徑匹配,通配符”*”為后綴,/servlet/a、/servlet/b都與/servlet/*匹配。
  1. <url-pattern>*.do</url-pattern>
這種屬于擴展名匹配,通配符”*”為前綴,/abc/a.do、/a.do都與*.do匹配。
  1. <url-pattern>/*</url-pattern>
這種屬于完全匹配,通配符”*”為后綴,匹配所有路徑。
需要注意的是:
  • 通配符要么在開頭,要么在結(jié)尾,不能在中間,<url-pattern>/*.do</url-pattern>就是錯誤的使用。
  • 如果不使用通配符,那么<url-pattern>的內(nèi)容必須以”/”開頭,<url-pattern>abc</url-pattern>就是錯誤的。
  • 三種通配符匹配方式的優(yōu)先級是匹配的范圍越大優(yōu)先級越低。如1-8所示:
例1-8  匹配優(yōu)先級
<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>
根據(jù)例1-8的配置,當(dāng)在瀏覽器端訪問http://localhost:8080/Example13/servlet/hello1時,hello1和hello2都能夠匹配,但是由于hello1匹配的更加準(zhǔn)確,范圍更小,所以訪問的是hello1這個Servlet。




本文版權(quán)歸傳智播客Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!
作者:傳智播客Java培訓(xùn)學(xué)院
首發(fā):http://m.8y3kgpwe.cn/javaee 
0 分享到:
和我們在線交談!