第十二章 映射请求到Servlet(JavaTM Servlet 规范3.1 )

Mapping Requests to Servlets 映射请求到 Servlet

The mapping techniques described in this chapter are required for Web containers mapping client requests to servlets.

Web 容器需要使用本章描述的映射技术将客户端请求映射到 servlet。

12.1 Use of URL Paths 使用 URL 路径

Upon receipt of a client request, the Web container determines the Web application to which to forward it. The Web application selected must have the longest context path that matches the start of the request URL. The matched part of the URL is the context path when mapping to servlets.

The Web container next must locate the servlet to process the request using the path mapping procedure described below.

当接收到一个客户端请求,Web容器确定转发到那个Web应用。必须选择拥有最长上下文路径匹配请求 URL 开始的Web应用。当映射到 servlet 时,URL匹配的一部分是上下文路径。Web容器接下来必须使用下面描述的路径映射过程来定位 servlet 来处理请求。

The path used for mapping to a servlet is the request URL from the request object minus the context path and the path parameters. The URL path mapping rules below are used in order. The first successful match is used with no further matches attempted:

用来映射 servlet 的路径是请求对象的请求URL 减去上下文路径和路径参数。下面的URL映射路径按顺序使用。使用第一个成功的匹配,不会再做更一步的匹配:

  1. The container will try to find an exact match of the path of the request to the path of the servlet. A successful match selects the servlet. 容器将尝试找出请求路径到 servlet 路径的精确匹配。选择成功匹配的 servlet。
  2. The container will recursively try to match the longest path-prefix. This is done by stepping down the path tree a directory at a time, using the ’/’ character as a path separator. The longest match determines the servlet selected. 容器将递归尝试匹配最长的路径前缀。通过一次一个目录遍历路径树,使用 ‘/‘ 字符作为路径分割符来完成。选择最长匹配的 servlet。
  3. If the last segment in the URL path contains an extension (e.g. .jsp), the servlet container will try to match a servlet that handles requests for the extension. An extension is defined as the part of the last segment after the last ’.’ character. 如果URL路径的最后片段包含一个扩展名(例如 .jsp),servlet 容器将尝试匹配用来为扩展名处理请求的 sevlet。扩展名被定义为最后片段最后 ‘.’ 字符之后的部分。
  4. If neither of the previous three rules result in a servlet match, the container will attempt to serve content appropriate for the resource requested. If a "default" servlet is defined for the application, it will be used. Many containers provide an implicit default servlet for serving content.如果前面的三个规则都没有匹配一个 servlet ,容器将尝试为请求的资源提供合适的内容。如果应用定义了一个“默认”servlet,它将被使用。很多容器为提供内容提供了一个隐性默认sevlet 。

The container must use case-sensitive string comparisons for matching.

容器必须使用大小写敏感的字符串比较来匹配。

12.2 Specification of Mappings 映射规范

In the Web application deployment descriptor, the following syntax is used to define mappings:

在 web 应用描述符中,使用下面的语法来定义映射:

  • A string beginning with a ‘/’ character and ending with a ‘/*’ suffix is used for path mapping.
  • 以 ‘/‘ 字符开始并且以 ‘/*’ 后缀结尾的字符串用来路径映射。
  • A string beginning with a ‘*.’ prefix is used as an extension mapping.
  • 以 ‘*.’ 前缀开始的字符串用做扩展名映射。
  • The empty string ("") is a special URL pattern that exactly maps to the
    application‘s context root, i.e., requests of the form http://host:port/<context- root>/. In this case the path info is ’/’ and the servlet path and context path is empty string (““).
  • 空字符串(””)是一个特殊的 URL pattern ,精确映射到应用的上下文根,例如,来自  http://host:port/<context- root>/ 的请求。在这种情况下,路径信息(path info)是 ‘/‘ 并且 servlet 路径和上下文路径是空字符串(“”)。
  • A string containing only the ’/’ character indicates the "default" servlet of the application. In this case the servlet path is the request URI minus the context path and the path info is null. 一个只包含 ‘/‘ 字符的字符串表示应用的 “默认” servlet 。在这种情况下,servlet 路径是请求 URI 减去上下文路径并且路径信息(path info)是 null。
  • All other strings are used for exact matches only.
    If the effective web.xml (after merging information from fragments and annotations) contains any url-patterns that are mapped to multiple servlets then the deployment must fail. 其他字符串仅用来进行精确匹配。如果有效的 web.xml (合并来自片段和注解的信息之后)包含任何匹配到多个 servlet 的 url-pattern,那么部署必须失败。

12.2.1 Implicit Mappings 隐含映射

If the container has an internal JSP container, the *.jsp extension is mapped to it, allowing JSP pages to be executed on demand. This mapping is termed an implicit mapping. If a *.jsp mapping is defined by the Web application, its mapping takes precedence over the implicit mapping.

A servlet container is allowed to make other implicit mappings as long as explicit mappings take precedence. For example, an implicit mapping of *.shtml could be mapped to include functionality on the server.

如果容器有一个内部的 JSP 容器,*.jsp 扩展名将映射到它,允许根据需要执行 JSP 页面。此映射被称为隐含映射。如果引用定义了 *.jsp 映射,此映射优先于隐含映射。servlet 容器允许其他的隐式映射只要显示映射优先(级更高)。例如,.shtml 的隐式映射可以映射包含服务器上的功能。

12.2.2 Example Mapping Set 映射设置实例

Consider the following set of mappings:

思考下面的映射设置:

TABLE 12-1 Example Set of Maps

表 12-1 映射设置示例:

Path Pattern   Servlet 

/foo/bar/*     servlet1

/baz/*        servlet2

/catalog      servlet3

*.bop       servlet4

The following behavior would result:

以下是映射的结果:


TABLE 12-2 Incoming Paths Applied to Example Maps 

表 12-2 入站路径应用到示例中的映射

Incoming Path        Servlet Handling Request  处理请求的 Servlet

/foo/bar/index.html      servlet1

/foo/bar/index.bop     servlet1

/baz             servlet2

/baz/index.html       servlet2

/catalog           servlet3

/catalog/index.html      “default” servlet (“默认” servlet)

/catalog/racecar.bop    servlet4

/index.bop          servlet4

Note that in the case of /catalog/index.html and /catalog/racecar.bop, the servlet mapped to “/catalog” is not used because the match is not exact.

注意 /catalog/index.html 和 /catalog/racecar.bop,映射到 “/catalog” 的 servlet 没有被使用,因为匹配不精确。

时间: 2024-10-08 17:27:52

第十二章 映射请求到Servlet(JavaTM Servlet 规范3.1 )的相关文章

第十二章_请求和响应的装饰

12.1.Decorator模式 即使没有某一个对象的类的源代码,甚至即便这个类是声明为final的,Decorator模式和Wrapper模式都允许装饰或包装这个对象. Decorator模式适用于无法使用继承的情况(比如,所指对象的类为final),或者你不想亲自创建对象,而是想从另一个子系统中获取.例如,Servlet容器创建了一个ServletRequest和一个ServletResponse,并将他们传给Servlet的service方法.改变ServletRequest和Servle

第十二章 APO编程语言

第十二章      APO编程语言 APO编程语言是基于汇编语言和面向对象编程.基本指令只有7种:赋值指令.COPY指令.BTX(位X测试为1.或0转移)指令.查表跳转指令switch(RN){-.}.移位与循环指令S.三操作数运算指令.调用与返回指令.所有的指令大小.除了32位立即数赋值是2字外:其它都是32位,一个字. 指令执行时间,除了32位立即数赋值是2ns.COPY指令取决于拷贝的长度外:其它指令都是1ns. 应用程序只能使用R0-R4,R8-R15的21个寄存器作为高速的寄存器局部变

[CSAPP笔记][第十二章并发编程]

第十二章 并发编程 如果逻辑控制流在时间上是重叠,那么它们就是并发的(concurrent).这种常见的现象称为并发(concurrency). 硬件异常处理程序,进程和Unix信号处理程序都是大家熟悉的例子. 我们主要将并发看做是一种操作系统内核用来运行多个应用程序的机制. 但是,并发不仅仅局限于内核.它也可以在应用程序中扮演重要的角色. 例如 Unix信号处理程序如何允许应用响应异步事件 例如:用户键入ctrl-c 程序访问虚拟存储器的一个未定义的区域 其他情况 访问慢速I/O设备 当一个应

第十二章 并发编程 学习笔记

第十二章 并发编程 进程是程序级并发,线程是函数级并发. 三种基本的构造并发程序的方法: 进程:每个逻辑控制流是个一个进程,由内核进行调度和维护. I/O多路复用:应用程序在一个进程的上下文中显式地调度他们自己的逻辑流. 线程:运行在单一进程上下文中的逻辑流,由内核进行调度. 12.1 基于进程的并发编程 构造并发程序最简单的方法就是用进程. 使用大家都很熟悉的函数例如: fork exec waitpid 关于在父.子进程间共享状态信息:共享文件表,但不共享用户地址空间. 进程又独立的地址空间

第二十二章 TCP/IP层的实现

                      第二十二章    TCP/IP层的实现        我比较喜欢先难后易,如果把GPU显示管理.和网络管理拿下后:我会从头整理.改写一遍APO操作系统.这样,就会形成APO操作系统的锥形.也获得了全局观.内核CPU线路.和用户CPU线路,你可以将它们看成是独立的2个32位CPU核:内核CPU主要任务是实时处理.硬件中断,256个实时线程包含了一些中断程序的后半部.用户CPU主要是动态优先级进程.线程调度,各种应用程序的运行:2个核之间是通过消息交互.句

Java学习笔记—第十二章 Java网络编程入门

第十二章  Java网络编程入门 Java提供的三大类网络功能: (1)URL和URLConnection:三大类中最高级的一种,通过URL网络资源表达方式,可以很容易确定网络上数据的位置.利用URL的表示和建立,Java程序可以直接读入网络上所放的数据,或把自己的数据传送到网络的另一端. (2)Socket:又称"套接字",用于描述IP地址和端口(在Internet中,网络中的每台主机都有一个唯一的IP地址,而每台主机又通过提供多个不同端口来提供多种服务).在客户/服务器网络中,当客

第十二章、软件包管理

第十二章.软件包管理 本章内容 ?软件运行环境 ?软件包基础 ?rpm包管理 ?yum管理 ?定制yum仓库 ?编译安装 软件运行和编译 ABI:Application Binary Interface Windows与Linux不兼容 ELF(Executable and Linkable Format) PE(Portable Executable) 库级别的虚拟化: Linux: WINE Windows: Cywin API:Application Programming Interfa

【.NET Core项目实战-统一认证平台】第十二章 授权篇-深入理解JWT生成及验证流程

原文:[.NET Core项目实战-统一认证平台]第十二章 授权篇-深入理解JWT生成及验证流程 [.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章介绍了基于Ids4密码授权模式,从使用场景.原理分析.自定义帐户体系集成完整的介绍了密码授权模式的内容,并最后给出了三个思考问题,本篇就针对第一个思考问题详细的讲解下Ids4是如何生成access_token的,如何验证access_token的有效性,最后我们使用.net webapi来实现一个外部接口(本来想用JAVA来实现的,

20190925 On Java8 第二十二章 枚举

第二十二章 枚举 基本 enum 特性 创建 enum 时,编译器会为你生成一个相关的类,这个类继承自 Java.lang.Enum. valueOf() 是在 Enum 中定义的 static 方法,它根据给定的名字返回相应的 enum 实例,如果不存在给定名字的实例,将会抛出异常. 将静态类型导入用于 enum 使用 static import 能够将 enum 实例的标识符带入当前的命名空间,所以无需再用 enum 类型来修饰 enum 实例. 方法添加 除了不能继承自一个 enum 之外