-------------------------------- Servlet的映射路径剖析-------------------------------
Servlet 路径映射
关于Url-Pattern的配置:
- 1.完全路径匹配 以/开头 例如 /aaa /aaa/bbb
- 2.目录匹配 以/开头 例如 /aaa/* /*
- 3.扩展名匹配 不能以/开头 例如 *.do *.action ....
优先级: 完全路径匹配 > 目录匹配 > 扩展名匹配
经典错误: /*.do
举例:
对于如下的一些映射关系:
- Servlet1 映射到 /abc/*
- Servlet2 映射到 /*
- Servlet3 映射到 /abc
- Servlet4 映射到 *.do
问题:
- 当请求URL为“/abc/a.html”,“/abc/*”和“/*”都匹配,哪个servlet响应
Servlet引擎将调用Servlet1。同样是目录匹配所限定范围更精确的先匹配
- 当请求URL为“/abc”时,“/abc/*”和“/abc”都匹配,哪个servlet响应
Servlet引擎将调用Servlet3。
- 当请求URL为“/abc/a.do”时,“/abc/*”和“*.do”都匹配,哪个servlet响应
Servlet引擎将调用Servlet1。
- 当请求URL为“/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应
Servlet引擎将调用Servlet2.
- 当请求URL为“/xxx/yyy/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应
Servlet引擎将调用Servlet2。
* 服务器端路径 /demo4 (转发、包含...)
代码示例:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <servlet> <servlet-name>ServletDme01</servlet-name> <servlet-class>com.rl.servlet.ServletDme01</servlet-class> </servlet>
<servlet-mapping> <servlet-name>ServletDme01</servlet-name> <!-- 完全路径匹配 <url-pattern>/servlet/ServletDme01</url-pattern> 目录匹配 <url-pattern>/servlet/*</url-pattern> 目录全匹配 <url-pattern>/*</url-pattern> 后缀名匹配 <url-pattern>*.da</url-pattern> --> <url-pattern>/*</url-pattern> </servlet-mapping>
<servlet> <servlet-name>ServletDme2</servlet-name> <servlet-class>com.rl.servlet.ServletDme2</servlet-class> </servlet>
<servlet-mapping> <servlet-name>ServletDme2</servlet-name> <url-pattern>/abc/*</url-pattern> </servlet-mapping> </web-app> |