在web.xml文件中,一個(gè)<servlet-mapping>元素用于映射一個(gè)Servlet的對(duì)外訪問路徑,該路徑也稱為虛擬路徑。例如<url-pattern>/TestServlet</url-pattern>,其中“/TestServlet”就是一個(gè)虛擬路徑。創(chuàng)建的Servlet只有在web.xml中映射了虛擬路徑,客戶端才能訪問。但是,在映射Servlet時(shí),有一些細(xì)節(jié)問題需要注意,比如Servlet的多重映射,在映射路徑中使用通配符等,接下來,針對(duì)這些問題進(jìn)行詳細(xì)解釋,具體如下:
(1)Servlet的多重映射
Servlet的多重映射是指同一個(gè)Servlet可以被映射成多個(gè)虛擬路徑,即客戶端可以通過多個(gè)路徑訪問同一個(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,在瀏覽器端地址欄通過http://localhost:8080/Example13/AServlet和http://localhost:8080/Example13/BServlet都能夠過訪問到AServlet。但是這種配置方式,現(xiàn)在開發(fā)基本不用了,大家了解即可。
(2)映射路徑中使用通配符
有時(shí)候,我們希望某個(gè)目錄下的所有路徑都可以訪問同一個(gè)Servlet,這時(shí),可以在Servlet映射的路徑中使用通配符”*”。如下所示:
- <url-pattern>/servlet/*</url-pattern>
這種屬于路徑匹配,通配符”*”為后綴,/servlet/a、/servlet/b都與/servlet/*匹配。
- <url-pattern>*.do</url-pattern>
這種屬于擴(kuò)展名匹配,通配符”*”為前綴,/abc/a.do、/a.do都與*.do匹配。
- <url-pattern>/*</url-pattern>
這種屬于完全匹配,通配符”*”為后綴,匹配所有路徑。
需要注意的是:
- 通配符要么在開頭,要么在結(jié)尾,不能在中間,<url-pattern>/*.do</url-pattern>就是錯(cuò)誤的使用。
- 如果不使用通配符,那么<url-pattern>的內(nè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)在瀏覽器端訪問
http://localhost:8080/Example13/servlet/hello1時(shí),hello1和hello2都能夠匹配,但是由于hello1匹配的更加準(zhǔn)確,范圍更小,所以訪問的是hello1這個(gè)Servlet。
本文版權(quán)歸傳智播客Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!
作者:傳智播客Java培訓(xùn)學(xué)院
首發(fā):http://xamj520.com/javaee