Servlet原理

Servlet原理

1. Servlet运行原理

在这里插入图片描述

2. Mapping问题

1. 一个Servlet可以指定一个映射路径

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

2. 一个Servlet可以指定多个映射路径

 <servlet-mapping>
    <servlet-name>Hello</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>
 <servlet-mapping>
    <servlet-name>Hello</servlet-name>
    <url-pattern>/hello2</url-pattern>
  </servlet-mapping>
......

3. 一个Servlet可以指定通用映射路径

 <servlet-mapping>
    <servlet-name>Hello</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>

4. 一个Servlet可以指定后缀或前缀映射路径

 <servlet-mapping>
    <servlet-name>Hello</servlet-name>
    <url-pattern>*.yg</url-pattern>
  </servlet-mapping>
 <servlet-mapping>
    <servlet-name>Hello</servlet-name>
    <url-pattern>/yg*</url-pattern>
  </servlet-mapping>
指定后缀时,前面不能有斜杠

5. 优先级问题

如果指定了固定的路径映射,它的优先级会高于通配的路径映射。

严格来讲会根据"精确优先"进行匹配:

  • 路径模式包含的路径变量越少、通配符越少,SpringMVC认为它越精确。例如/hotels/{hotel}/*只包含一个路径变量和一个通配符,它会被认为比/hotels/{hotel}/**更精确,因为后者包含一个路径变量和两个通配符
  • 如果两个路径模式包含的路径变量和通配符数量相同,长度更长的路径模式会被认为更精确。例如/foo/bar*foo/*两个路径模式都只包含一个通配符,但/foo/bar/*更长,因此它会被认为更精确
  • 当两个路径模式包含的路径变量和通配符总数相同时,通配符较少的路径模式会被认为更精确。例如/hotels/{hotel}/hotels/*都只包含一个路径变量和通配符,但是前者只包含路径变量,没有包含通配符,因此他被认为更精确

此外,还有以下的匹配规则:

  1. /**路径模式几乎可以匹配任何请求地址,因此其它任何路径模式都比它更精确。例如.api/{a}/{b}/{c}虽然包含三个路径变量,但是依然比/**更精确。
    乎可以匹配任何请求地址,因此其它任何路径模式都比它更精确。例如.api/{a}/{b}/{c}虽然包含三个路径变量,但是依然比/**更精确。
  2. /public/**几乎可以匹配/public/路径下的任何请求地址,因此任何不包含**通配符的路径模式都比它更精确。例如/public/{a}/{b}/{c}虽然包含了三个路径变量,但它依然比前者更精确。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值