Servlet请求映射(第十二篇)

web容器将客户端请求映射到servlet,必须按照这节描述映射servlet技术 ( 在2.5版本只是建议,可以自己设计映射servlet)

12.1、使用URL路径

  • 收到客户请求后,web容器确定将其转发到web应用程序。所选的web应用程序必须具有与请求URL的开头匹配的最长上下文路径。URL的匹配部分是映射到servlet的上下文路径。
  • web容器接下来必须使用下面描述的路径映射过程定位servlet来处理请求
  • 用于映射到servlet的路径是来自请求减去上下文路径和路径参数,以下URL路径映射规则按顺序使用。使用第一个成功的匹配,不尝试其他匹配:
    1. 容器将尝试查找请求路径与Servlet路径的精确匹配,成功匹配将选择servlet
    2. 容器将递归地尝试匹配最长的路径前缀,这是通过使用"/"字符作为路径分隔符,一次将路径树下移动到一个目录来完成的,满足最长匹配的servlet将会被选择
    3. 如果网址路径中的最后一段包含扩展名(例如.jsp),则servlet容器将尝试匹配处理改扩展名请求的servlet,扩展名定义为最后一个"." 字符后的最后一部分
    4. 如果前三个规则均未匹配到servlet,则容器将尝试提供适合于所请求资源的内容。如果为应用程序定义了默认servlet,则将使用它,许多容器提供隐式默认servlet来提供内容。

12.2、映射的规范

  • 在web应用程序部署描述符中,以下语法用于定义映射:
    • 路径映射使用以"/“字符开头并以”/*"后缀结尾的字符串
    • 以“*.”前缀开头的字符串用作扩展名映射(例如 *.jsp)
    • 空字符串("")是一种特殊的URL模式,它精确地映射到应用程序的上下文根,即http://host:port//形式的请求,在这种情况下,路径信息为"/",而servlet路径和上下文路径为空字符串("")
    • 仅包含"/"字符的字符串表示应用程序的默认servlet,在这种情况下,servlet路径是请求uri减去上下文路径,并且路径信息为null
    • 所有其他字符串仅用于完全匹配。
  • 如果有效的web.xml(合并来自web-segement.xml和注解mapping信息)包含映射到多个servlet的任何url模式,则部署必须失败。

12.2.1、隐式映射(扩展名映射)

  • 如果容器具有内部JSP容器,则*.jsp扩展名将映射到该容器,从而允许按需执行JSP页面,该映射被称为隐式映射,如果web应用程序定义了*.jsp映射,则其映射优先于隐式映射。
  • 只有显式映射优先,就可以允许servlet容器进行其他隐式映射,例如,可以将*.shtml的隐式映射为包括服务器上其他自定义的功能。

12.2.2、映射示例列表

  • servlet配置path

    • 路径格式Servlet
      /foo/bar/*servlet1
      /baz/*servlet2
      /catalogservlet3
      *.bopservlet4
  • 以下是实际请求(应该到那个servlet)

    • 请求url路径对于servlet处理器
      /foo/bar/index.htmlservlet1
      /foo/bar/index.bopservlet1
      /bazservlet2
      /baz/index.htmlservlet2
      /catalogservlet3
      /catalog/index.html“默认” servlet
      /catalog/racecar.bopservlet4
      /index.bopservlet4

      注意: 在/catalog/index.html和/catalog/racecar.bop的情况下,由于匹配不完全,因此不使用映射到"/catalog"的servlet

    • 优先级:先匹配路径,后匹配扩展名

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值