|-- Context Path --|-- Servlet Path -|--Path Info--| http://www.myserver.com /mywebapp /helloServlet /hello |-------- Request URI ----------------------------|
① 当映射一个servlet时候,可以多层 比如
<url-pattern>/servlet/index.html</url-pattern> ok
从这里还可以看出,后缀名是 html 不一定就是 html,可能是假象.
② 使用通配符在servlet映射到URL中
有两种格式:
第一种格式 *.扩展名 比如 *.do *.ss
第二种格式 以 / 开头 同时以 /* 结尾 比如 /* /news/*
通配符练习题:
l Servlet1 映射到 /abc/*
l Servlet2 映射到 /*
l Servlet3 映射到 /abc
l Servlet4 映射到 *.do
问题(面试题):
l 当请求URL为“/abc/a.html”,“/abc/*”和“/*”都匹配,哪个servlet响应
Servlet引擎将调用Servlet1。
l 当请求URL为“/abc”时,“/abc/*”和“/abc”都匹配,哪个servlet响应
Servlet引擎将调用Servlet3。
l 当请求URL为“/abc/a.do”时,“/abc/*”和“*.do”都匹配,哪个servlet响应
Servlet引擎将调用Servlet1。
l 当请求URL为“/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应
Servlet引擎将调用Servlet2。
l 当请求URL为“/xxx/yyy/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应
Servlet引擎将调用Servlet2。
在匹配的时候,要参考的标准:
(1) 看谁的匹配度高,谁就被选择
(2) *.do 的优先级最低