美文网首页
Servlet映射规则

Servlet映射规则

作者: kindol | 来源:发表于2018-07-22 18:44 被阅读0次

    Servlet容器的URL匹配过程

    1. 发送请求url:http://localhost/test/abc
    2. Servlet容器将请求的url减去当前应用上下文的路径作为其url,也就去去掉http://localhost/test,剩下/abc用来作路径匹配。
    3. 按照一定的匹配规则只要有一个servlet匹配成功,就不会去理会其他的servlet(当然,filter是不同的)

    url-pattern详解

    • 路径映射:以”/’开头和以”/*”结尾
    • 拓展映射:以前缀”*.”开头
    • default servlet:"/"
    • 精确映射:完全的url路径

    匹配规则

    Servlet共有四大匹配规则,

    • 精确路径匹配

      比如URL为http://localhost/test/abc,去掉上下文路径为/abc,如果 servletA 的url-pattern为 /abc,servletB的url-pattern为 /*,servletA完全匹配,则其他servlet不会再匹配

    • 最长路径匹配(跟同类相比的最长)

      如上URL,没有上下文路径,如果 servletA 的url-pattern为 /test/*,servletB的url-pattern为 /test/abc/*,根据最长路径,此时选择servletB

      但是,如果servletC的url-pattern为/test/abc,那么会选择servletC,完全匹配

    • 扩展匹配

      果url最后一段包含扩展,容器将会根据扩展选择合适的servlet。如:servletA的url-pattern:*.action

    • 默认匹配

      如果前面三条规则都没有找到一个servlet,容器会根据url选择对应的请求资源。如果应用定义了一个default servlet,则容器会将请求丢给default servlet,default servlet的url-pattern为"/"

    filter与url-pattern

    对于filter,不会像servlet那样只匹配一个servlet,因为filter的集合是一个链,所以只会有处理的顺序不同,而不会出现只选择一个filterFilter的处理顺序和filter-mapping在web.xml中定义的顺序相同

    一个特例

    /*.action会被tomcat认为是错误的匹配,因为这个匹配即属于路径映射,也属于扩展映射,导致容器无法判断。

    相关文章

      网友评论

          本文标题:Servlet映射规则

          本文链接:https://www.haomeiwen.com/subject/yohrmftx.html