Servlet 映射有两个子标签,url-pattern 和 servlet-name。url-pattern 指定了应该调用 servlet-name 中给出的 servlet 的 url 类型。请注意,容器将使用区分大小写的字符串比较进行 servlet 匹配。
在服务器.com的 servlet 容器上的服务器上下文文件的第一个规范与以下模式匹配:url-pattern
web.xml
<url-pattern>/status/*</url-pattern>
http://server.com/server/status/synopsis = Matches
http://server.com/server/status/complete?date=today = Matches
http://server.com/server/status = Matches
http://server.com/server/server1/status = Does not match
第二规范 位于代理位置的路径 /examples 的上下文 example.com 与以下模式匹配:url-pattern
<url-pattern>*.map</url-pattern>
http://server.com/server/US/Oregon/Portland.map = Matches
http://server.com/server/US/server/Seattle.map = Matches
http://server.com/server/Paris.France.map = Matches
http://server.com/server/US/Oregon/Portland.MAP = Does not match, the extension is uppercase
http://example.com/examples/interface/description/mail.mapi =Does not match, the extension is mapi rather than map`
的第三个规范,包含该模式的映射在没有其他模式匹配时与请求匹配。这是默认映射。映射到此模式的 servlet 称为缺省 servlet。url-mapping
<url-pattern>/</url-pattern>
默认映射通常定向到应用程序的第一页。显式提供默认映射还可以确保应用程序返回中格式错误的 URL 请求由应用程序处理,而不是返回错误。
下面的 servlet 映射元素将 servlet 实例映射到缺省映射。server
<servlet-mapping>
<servlet-name>server</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
对于包含此元素的上下文,任何未由其他映射处理的请求都将转发到 servlet。server
最重要的是,我们应该了解URL路径映射的规则
- 容器将尝试查找请求路径与 servlet 路径的完全匹配。成功的匹配将选择 servlet。
- 容器将以递归方式尝试匹配最长的路径前缀。这是通过一次在路径树中单步执行一个目录,使用“/”字符作为路径分隔符来完成的。最长的匹配项决定了所选的 servlet。
- 如果 URL 路径中的最后一个段包含扩展(例如.jsp),则 servlet 容器将尝试匹配处理扩展请求的 servlet。扩展被定义为最后一个“.”字符之后的最后一个段的一部分。
- 如果前三个规则都没有导致 servlet 匹配,容器将尝试提供适合所请求资源的内容。如果为应用程序定义了“默认”servlet,则将使用它。
引用网址模式