spring源码解读(二)基础篇之servlet3.1规范(二)

目录

应用生命周期事件

事件监听器

监听器类配置

提供监听器类

部署声明

监听器注册

关闭时通知

分布式容器

映射请求到 Servlet

使用 URL 路径

映射规范

隐式映射

安全

介绍

部署描述文件

部署描述文件元素


应用生命周期事件

事件监听器

应用事件监听器是实现一个或多个 Servlet 事件监听器接口的类。它们是在部署 Web 应用时,实例化并注册
Web 容器中。它们由开发人员在 WAR 包中提供。
Servlet 事件监听器支持在 ServletContext HttpSession ServletRequest 状态改变时进行事件通知。 Servlet
上下文监听器是用来管理应用的资源或 JVM 级别持有的状态。 HTTP 会话监听器是用来管理从相同客户端
或用户进入 web 应用的一系列请求关联的状态或资源。 Servlet 请求监听器是用来管理整个 Servlet 请求生命
周期的状态。异步监听器是用来管理异步事件,例如超时和完成异步处理。
可以有多个监听器类监听每一个事件类型,且开发人员可以为每一个事件类型指定容器调用监听器 bean
顺序。

监听器类配置

提供监听器类

Web 应用的开发人员提供实现了一个或多个在 javax.servlet API 中的监听器接口的监听器类。每一个监听器
类必须有一个无参构造器。监听器类打包到 WAR 包中,或者在 WEB-INF/classes 归档项下,或者在
WEB-INF/lib 目录的一个 JAR 内部。

部署声明

监听器类在 Web 应用部署描述符中使用 listener 元素声明。它们根据类名列出的顺序就是它们被调用的顺 89
序。与其他监听器不同, AsyncListener 类型的监听器可能仅通过编程式注册(使用一个 ServletRequest )。

监听器注册

Web 容器创建每一个监听器类的一个实例,并在应用处理第一个请求之前为事件通知注册它。 Web 容器根
据他们实现的接口注册监听器实例,且按照它们出现在部署描述符中的顺序。在 Web 应用执行期间,监听
器按照它们注册的顺序被调用,但也有例外,例如, HttpSessionListener.destroy 按照相反的顺序调用。

关闭时通知

在应用关闭时,监听器以它们声明时相反的顺序得到通知,且通知会话监听器在通知上下文监听器之前。
通知会话监听器 session 失效必须在通知上下文监听器关闭之前。

分布式容器

在分布式 Web 容器中, HttpSession 实例被限到特定的 JVM 服务会话请求,且 ServletContext 对象被限定到
Web 容器所在的 JVM 。分布式容器不需要传播 Servlet 上下文事件或 HttpSession 事件到其他 JVM 。监听器
类实例被限定到每个 JVM 的每个部署描述符声明一个。

映射请求到 Servlet

使用 URL 路径

在收到客户端请求时, web 容器确定转发到哪一个 Web 应用。选择的 Web 应用必须具有最长的上下文路径
匹配请求 URL 的开始。当映射到 Servlet 时, URL 匹配的一部分是上下文。
Web 容器接下来必须用下面描述的路径匹配步骤找出 servlet 来处理请求。
用于映射到 Servlet 的路径是请求对象的请求 URL 减去上下文和路径参数部分。下面的 URL 路径映射规则
按顺序使用。使用第一个匹配成功的且不会进一步尝试匹配:
1. 容器将尝试找到一个请求路径到 servlet 路径的精确匹配。成功匹配则选择该 servlet
2. 容器将递归地尝试匹配最长路径前缀。这是通过一次一个目录的遍历路径树完成的,使用‘ / ’字符作为
路径分隔符。最长匹配确定选择的 servlet
3. 如果 URL 最后一部分包含一个扩展名(如 .jsp ), servlet 容器将视图匹配为扩展名处理请求的 Servlet
扩展名定义在最后一部分的最后一个‘ . ’字符之后。
4. 如果前三个规则都没有产生一个 servlet 匹配,容器将试图为请求资源提供相关的内容。如果应用中定义
了一个“ default servlet ,它将被使用。许多容器提供了一种隐式的 default servlet 用于提供内容。
容器必须使用区分大小写字符串比较匹配。

映射规范

web 应用部署描述符中,以下语法用于定义映射:
■ 以‘ / ’字符开始、以‘ /* ’后缀结尾的字符串用于路径匹配。
■ 以‘ *. ’开始的字符串用于扩展名映射。
■ 空字符串“”是一个特殊的 URL 模式,其精确映射到应用的上下文根,即, http://host:port/<context-root>/
请求形式。在这种情况下,路径信息是‘ / ’且 servlet 路径和上下文路径是空字符串(“”)。
■ 只包含“ / ”字符的字符串表示应用的“ default servlet 。在这种情况下, servlet 路径是请求 URL 减去上
下文路径且路径信息是 null
■ 所以其他字符串仅用于精确匹配。
如果一个有效的 web.xml (在从 fragment 和注解合并了信息后)包含人任意的 url-pattern ,其映射到多个
servlet ,那么部署将失败。

隐式映射

如果容器有一个内部的 JSP 容器, *.jsp 扩展名映射到它,允许执行 JSP 页面的要求。该映射被称为隐式映 92
射。如果 Web 应用定义了一个 *.jsp 映射,它的优先级高于隐式映射。
Servlet 容器允许进行其他的隐式映射,只要显示映射的优先。例如,一个 *.shtml 隐式映射可以映射到包含
在服务器上的功能。

安全

介绍

web 应用包含的资源可以被多个用户访问。这些资源常常不受保护的遍历,开放网络如 Internet 。在这样的
环境,大量的 web 应用将有安全需求。
尽管质量保障和实现细节可能会有所不同,但 servlet 容器有满足这些需求的机制和基础设施,共用如下一
些特性:
身份认证: 表示通信实体彼此证明他们具体身份的行为是被授权访问的。
资源访问控制: 表示和资源的交互是受限于集合的用户或为了强制完整性、保密性、或可用性约束的程
序。
数据完整性: 表示用来证明信息在传输过程中没有被第三方修改。
保密或数据隐私: 表示用来保证信息只对以授权访问的用户可用。

部署描述文件

本章指定的 Java™Servlet 规范 3.0 版要求 Web 容器支持部署描述文件。部署描述文件表达了应用开发人员、
应用集成人员和 Web 应用部署人员之间的元素和配置信息。
对于 Java Servlet 2.4 和以后的版本,部署描述文件在 XML 模式文档中定义。

部署描述文件元素

所有 servlet 容器的 Web 应用程序部署描述文件需要支持以下类型的配置和部署信息:
ServletContext 初始化参数
Session 配置
Servlet 声明
Servlet 映射
应用程序生命周期监听器类
过滤器定义和过滤器映射
MIME 类型映射
欢迎文件列表
错误页面
语言环境和编码映射
安全配置,包括 login-config security-constraint security-constraint security-role-ref run-as
 
Servlet3.1规范(最终版) JavaTM Servlet 规范 版本 3.1(最终版) Shing Wai Chan Rajiv Mordani [作者] 穆茂强 张开涛 [译者] 2012年6月翻译 2013年7月修订 目录 前言 ............................... 3 其他资料 ............................................................................................................................................................ 3 谁应该读此规范 ................................................................................................................................................ 3 API规范 ............................................................................................................................................................3 其他的 Java 平台规范 ....................................................................................................................................... 3 其他重要参考资料 ............................................................................................................................................ 4 提供反馈 ............................................................................................................................................................ 4 专家组成员 ........................................................................................................................................................ 5 答谢 .................................................................................................................................................................... 5 目录 ............................... 6 概览 .............................. 13 1.1 1.2 1.3 1.4 1.5 1.6 什么是 Servlet? .................................................................................................................................. 13 什么是Servlet容器?...............................................................................................................................13 例子...........................................................................................................................................................13 Serv
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值