Servlet-mapping 有两个子标签,url-pattern 和 servlet-name。 url-pattern 指定应该调用 servlet-name 中给出的 servlet 的 url 类型。请注意,容器将使用区分大小写的字符串比较来进行 servlet 匹配。
第一个规范 url-pattern web.xml 文件在 server .com 的 servlet 容器上的服务器上下文与 <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
第二个规范 url-pattern 位于example.com 代理上路径/examples 的上下文与<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`
第三规范 url-mapping,如果没有其他模式匹配,则包含模式<url-pattern>/</url-pattern> 的映射匹配请求。这是默认映射。映射到此模式的 servlet 称为默认 servlet。
默认映射通常指向应用程序的第一页。显式提供默认映射还可以确保应用程序返回的格式错误的 URL 请求由应用程序处理,而不是返回错误。
下面的 servlet-mapping 元素将server servlet 实例映射到默认映射。
<servlet-mapping>
<servlet-name>server</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
对于包含此元素的上下文,任何未被其他映射处理的请求都将转发到server servlet。
最重要的是我们应该了解URL路径映射规则
- 容器将尝试查找请求路径与 servlet 路径的完全匹配。成功匹配选择 servlet。
- 容器将递归地尝试匹配最长的路径前缀。这是通过使用“/”字符作为路径分隔符一次将路径树下移一个目录来完成的。最长的匹配决定了选择的 servlet。
- 如果 URL 路径中的最后一段包含扩展(例如 .jsp),则 servlet 容器将尝试匹配处理扩展请求的 servlet。扩展名定义为最后一个“.”字符之后的最后一段。
- 如果前三个规则都没有导致 servlet 匹配,则容器将尝试提供适合所请求资源的内容。如果为应用程序定义了“默认”servlet,则会使用它。
参考URL Pattern