关于web:urlpattern映射的规则

11次阅读

共计 1648 个字符,预计需要花费 5 分钟才能阅读完成。

url-pattern 映射的规定

首先,要明确一点,“*”在这里不代表通配符,也不代表表达式,他就是约定好的规定;

那么何为映射,即申请门路 url 减去以后的利用上下文,剩下的字符串则为映射

为了很好阐明下列例子;在此规定利用上下文是:http://127.0.0.1:8080/myapplication

  • 准确匹配

    准确匹配,就是映射必须和配置的映射是齐全相等;

    例如我当初申请一个门路是http://127.0.0.1:8080/myapplication/addUser/addAdmin

    那么申请的映射则为 /addUser/addAdmin

    如此,在 servlet-mapping 中的配置 url-pattern 则设置为 /addUser/addAdmin 即可

    留神:优先级最高,且必须 url-pattern 配置的是和申请过去的等值;

  • 门路匹配

    门路匹配,就是应用“*”符号来进行门路形容

    例如我当初申请的门路是http://127.0.0.1:8080/myapplication/updateUser/updateAdmin

    则我的申请映射是/updateUser/updateAdmin

    假如,我当初配置了两个 url-pattern

    <servlet-mapping>
            <servlet-name>hello</servlet-name>
            <url-pattern>/*</url-pattern>
            <!-- 匹配 /updateUser/ancd,/updateUser/a.jsp /updateUser/abc/def/aaa.do 等等 and so on! -->
            <url-pattern>/updateUser/*</url-pattern>
            <url-pattern>/updateUser/updateAdmin</url-pattern>
    </servlet-mapping>

    猜测一下会匹配到哪一个?

    其实,它只会匹配到第三个映射,因为优先级最高,其余的两个 url-pattern 都会被疏忽(留神:尽管我写的 servlet-name 是同一个,然而在不同的 servlet-name 下,情理是一样的)

    留神:优先级次高,url-pattern 里的后置能够应用 *,且之后不能再有字符串,否则被当成一般字符解决;

    <servlet-mapping>
            <servlet-name>hello</servlet-name>
            <!-- 正例,只有是 /updateUser/ 结尾的 前面能够匹配扩展名(前面会讲),也能够匹配门路 -->
            <url-pattern>/updateUser/*</url-pattern>
            <!-- 这里当作准确匹配解决了,“*”只是一般的字符而已 -->
            <url-pattern>/updateUser/*/updateAdmin</url-pattern>
    </servlet-mapping>
  • 扩展名匹配

    扩展名匹配,url-pattern 的内容只能是 “*. 扩展名” 的模式

    <servlet-mapping>
            <servlet-name>hello</servlet-name>
            <!-- 非法的例子 -->
            <url-pattern>/updateUser/*.action</url-pattern>
            <!-- 非法的例子,且匹配所有 *.do 的申请 记住是所有的 *.do -->
            <url-pattern>*.do</url-pattern>
    </servlet-mapping>

    留神:优先级第三,且不能和门路匹配同时存在;

  • 默认匹配

    最最最低了,切实是找不到匹配的映射了就会以它为准,且只有一个实例

    <servlet-mapping>
            <servlet-name>hello</servlet-name>
            <url-pattern>/</url-pattern>
    </servlet-mapping>

    留神:优先级最低,只能有一个实例,不要加任何货色,只用“/”;

无敌巨坑

应用 a 标签的时候,如果以 / 结尾,不会加上利用的上下文,留神奥~,得本人加上“/ 上下文 / 申请门路”

正文完
 0