Servlet规范之Requests与Servlets映射
创始人
2024-01-21 15:12:43
0

Mapping Requests to Servlets

文章是对 JSR-000340 JavaTM Servlet 3.1 Final Release的Java™ Servlet规范的翻译,尚未校准

文章目录

  • Mapping Requests to Servlets
    • Use of URL Paths
    • 规范映射
      • 隐式映射
      • 示例映射


本章所描述的映射技术是Web容器将客户端请求映射到servlets所需要的。

Use of URL Paths

在收到客户端请求时,Web 容器决定将其转发给哪个 Web 应用程序。所选择的Web应用程序必须有最长的上下文路径,与请求的URL的开头相匹配。当映射到servlets时,URL的匹配部分就是上下文路径。

Web容器接下来必须使用下面描述的路径映射过程来定位处理请求的Servlet。

用于映射到servlet的路径是来自请求对象的请求URL减去上下文路径和路径参数。下面的URL路径映射规则是按顺序使用的。第一个成功的匹配被使用,不再尝试其他匹配。

  1. 容器将试图找到请求的路径与servlet的路径的精确匹配。匹配成功后就会选择servlet。
  2. 容器将递归地尝试匹配最长的路径前缀。这是通过使用’/'字符作为路径分隔符,每次在路径树上逐级下移来实现的。最长的匹配决定了所选择的Servlet。
  3. 如果URL路径的最后一段包含一个扩展名(如.jsp),servlet容器将尝试匹配一个处理扩展名请求的servlet。扩展名被定义为最后一个’.'字符之后的部分。
  4. 如果前面三条规则都没有导致servlet的匹配,容器将尝试提供适合所请求资源的内容。如果为应用程序定义了一个 "default"的servlet,它将被使用。许多容器为服务内容提供了一个隐含的默认 servlet。

容器必须使用区分大小写的字符串比较来进行匹配。

规范映射

在Web应用程序部署描述符中,以下语法被用来定义映射。

  • 一个以/字符开头、以/*后缀结尾的字符串用于路径映射。
  • 一个以*.前缀开头的字符串被用作扩展映射。
  • 空字符串(“”)是一种特殊的URL模式,它正好映射到应用程序的上下文根,也就是说,请求的形式是http://host:port//。在这种情况下,路径信息是’/',Servlet路径和上下文路径是空字符串(“”)。
  • 仅包含’/'字符的字符串表示应用程序的 "default"servlet。在这种情况下,servlet路径是请求URI减去上下文路径,路径信息为空。
  • 所有其他字符串仅用于精确匹配。如果有效的web.xml(在合并了片段和注释的信息后)包含任何映射到多个servlet的url-pattern,那么部署必须失败。

隐式映射

如果容器有一个内部的JSP容器,*.jsp扩展被映射到它,允许JSP页面按需执行。这种映射被称为隐式映射。如果Web应用程序定义了*.jsp映射,它的映射将优先于隐式映射。

只要显式映射优先于隐式映射,servlet容器就可以进行其他隐式映射。例如,*.shtml的隐式映射可以被映射到服务器上的包含功能。

示例映射

请看下面的一组映射:

TABLE 12-1 Example Set of Maps

Path PatternServlet
/foo/bar/*servlet1
/baz/*servlet2
/catalogservlet3
*.bopservlet4

将产生以下行为:

TABLE 12-2 Incoming Paths Applied to Example Maps

Path PatternServlet
/foo/bar/index.htmlservlet1
/foo/bar/index.bopservlet1
/bazservlet2
/baz/index.htmlservlet2
/catalogservlet3
/catalog/index.html“default” servlet
/catalog/racecar.bopservlet4
/index.bopservlet4

请注意,在/catalog/index.html/catalog/racecar.bop的情况下,不使用映射到/catalog的servlet,因为不是精确匹配的。

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
Azure构建流程(Power... 这可能是由于配置错误导致的问题。请检查构建流程任务中的“发布构建制品”步骤,确保正确配置了“Arti...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...