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

全國(guó)咨詢/投訴熱線:400-618-4000

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

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

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




本文版權(quán)歸傳智播客Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!
作者:傳智播客Java培訓(xùn)學(xué)院
首發(fā):http://oisangadgets.com/javaee 
0 分享到:
和我們?cè)诰€交談!