Servlet 2.4 规范之第四篇:Servlet上下文
SRV.3.1 ServletContext接口说明
ServletContext接口定义了运行servlet的web应用中和servlet相关的视图信息。容器提供者负责提供ServletContext的一套具体实现。通过ServletContext对象,servlet能记录事件、获得资源引用,以及设置和保存当前context上其他servlet的一些属性信息。
ServletContext以web应用的某一路径为根节点,例如,servlet上下文能写成http://www.mycorp.com/catalog。所有起始于/catalog路径的请求,也就是上下文路径,都会被路由到和此ServletContext相关联的web应用上。
SRV.3.2 ServletContext接口的作用域
部署在容器中的每一个web应用都会有一个对应的ServletContext实例。如果容器是分布在多个虚拟机中,那么web应用会对应每一个JVM各有一个ServletContext实例。
不作为web应用的组成部分部署的servlet,会划分到默认的web应用下,并且也有一个默认的ServletContext。在分布式容器里,默认的ServletContext不作为分布式处理,它能且仅能存在于一个JVM中。
SRV.3.3 初始化参数
ServletContext接口的以下方法允许servlet访问context的初始化参数,当然,这些参数由应用开发人员在部署描述符中指定。
• getInitParameter
• getInitParameterNames
初始化参数主要用于传递一些设置类的信息,典型的例子就是设置web管理员的email地址,或者阀值控制系统的名字等。
SRV.3.4 Context属性
servlet可以通过名值对绑定一些属性对象。任何绑定在上下文中的属性都可以被同一web应用下的其他servlet访问。ServletContext接口的下述4个方法允许访问这些功能:
• setAttribute
• getAttribute
• getAttributeNames
• removeAttribute
SRV.3.4.1 分布式容器中的Context属性
Context属性定位于创建他们的JVM,这使得ServletContext属性不会以分布式容器的共享内存方式使用。当运行在分布式环境中的servlet需要共享数据时,这些数据应该放在session中,存储在数据库里,或者放在EJB组件中。
SRV.3.5 资源
ServletContext接口提供了访问web应用下静态内容的能力,包括HTML、GIF和JPEG文件,对应方法如下所述:
• getResource
• getResourceAsStream
getResource和getResourceAsStream方法接收以正斜杠“/”引导的字符串作为参数,该参数指明从上下文的根目录开始找对应的资源,被找的文件必须存在与服务器的文件系统系统上、war包、远程服务器,或者其他位置。
这两个方法不能用于访问动态内容,例如,当调用getResource("/index.jsp")时将返回jsp页面的源码,而不是你所期望的jsp页面的正常执行结果。
web应用中能通过getResourcePaths(String path)访问的所有资源列表,以及这个方法的所有语法细节都可以参见本规范的API文档。
SRV.3.6 多主机和servlet context
web服务系统可能支持一个服务器上的多个逻辑主机共享一个IP地址。这种能力有时也叫虚拟主机。在此情况下,每一个逻辑主机必须维护它自己的一套servlet context或servlet contexts。Servlet contexts完全不能被多个虚拟主机共享。
SRV.3.7 关于重载的思考
容器开发商并不一定要实现类重载机制。但一旦实现,就必须确保所有的servlet和类都在同一个类加载器的范围内加载成功。这个要求是为了保证应用程序按照应用开发人员预想的那样去执行。建议开发人员实现对session绑定的所有监听器的支持,以便于获得session终止和重载时的通知信息,并适时对session进行合适处理。
上一代容器创建新的类加载器并加载servlet,不同于类加载器加载servlet上下文中的其他servlet或类文件。这一点理解错误会导致一个servlet 上下文中的引用指向一个不可预期的类或对象,并且产生不可预期的行为。
SRV.3.7.1 临时工作目录
每个servlet上下文都需要一个临时存储目录。servlet容器必须为每一个servlet上下文提供一个单独的私有的临时目录,并且必须使它可以经由javax.servlet.context.tempdir这个上下文属性来访问。这个属性所对应的对象必须是java.io.File类型。
这个要求在很多servlet引擎中都有通用且便捷的实现。当servlet容器重启时它并不需要维护临时工作目录中的内容,但是必须确保一个servlet上下文中临时工作目录的内容对于其他正在运行的servlet上下文是完全不可见的。
文档信息
- 译者:张大爷
- 原文网址:http://www.cnblogs.com/flance/
- 版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0
Servlet 2.4 规范之第四篇:Servlet上下文的更多相关文章
- JavaWeb学习总结第四篇--Servlet开发
Servlet开发 用户在浏览器中输入一个网址并回车,浏览器会向服务器发送一个HTTP请求.服务器端程序接受这个请求,并对请求进行处理,然后发送一个回应.浏览器收到回应,再把回应的内容显示出来.这种请 ...
- Servlet 2.4 规范之第三篇:Servlet生命周期
SRV.2.3 Servlet生命周期 servlet有着定义良好且明确的生命周期,它定义了servlet以怎样的方式加载和实例化.初始化.怎样处理客户端请求.以及怎样停止服务.生命周期 ...
- Servlet 2.4 规范之第七篇:过滤器
过滤器是一套java组件,用于在请求—>资源—>应答的这一过程中即时转换处理负载和头信息. 本章讲述了Servlet 2.4 API中一些类和方法,这些类和方法提供了一套轻量级框架用于过滤 ...
- Servlet 2.4 规范之第六篇:响应
响应对象封装了服务端返回给客户端的所有信息.在HTTP协议中,这些信息通过HTTP头和消息体传送. SRV.5.1 缓冲 出于效率考量,servlet容器可以缓冲输出数据,但这并非强制要求.常见 ...
- Servlet 2.4 规范之第五篇:请求
request对象封装了来自客户端的所有请求信息.在HTTP协议中,客户端发给服务端的所有信息都是通过request对象的请求头和请求体来传送的. SRV.4.1 HTTP协 ...
- javaweb回顾第四篇Servlet异常处理
前言:很多网站为了给用户很好的用户体验性,都会提供比较友好的异常界面,现在我们在来回顾一下Servlet中如何进行异常处理的. 1:声明式异常处理 什么是声明式:就是在web.xml中声明对各种异常的 ...
- SpringBoot系列教程web篇Servlet 注册的四种姿势
原文: 191122-SpringBoot系列教程web篇Servlet 注册的四种姿势 前面介绍了 java web 三要素中 filter 的使用指南与常见的易错事项,接下来我们来看一下 Serv ...
- Servlet 2.4 规范之第一篇:概览
写在前面的话: 本系列是对<Java Servlet Specification Version 2.4>的完全翻译,力争但不保证完美表达出英文原文的思想内涵.如有疏漏之处,还 ...
- Servlet 2.4 规范之第二篇:Servlet接口
Servlet接口是Servlet API的最核心抽象类.所有的servlets都直接实现了这个接口,或者以更通用的方式继承了这个接口的实现类.Servlet API自带了两个实现了Servlet接口 ...
随机推荐
- NOIP模拟赛 路面修整
[题目描述] FJ打算好好修一下农场中某条凹凸不平的土路.按奶牛们的要求,修好后的路面高度应当单调上升或单调下降,也就是说,高度上升与高度下降的路段不能同时出现在修好的路中. 整条路被分成了N段,N个 ...
- PAT 乙级 1088
题目 题目链接:PAT 乙级 1088 题解 比较简单的一道题,下面来简单说说思路: 因为甲确定是一个两位数,因此通过简单的暴力循环求解甲的值,又根据题设条件“把甲的能力值的 2 个数字调换位置就是乙 ...
- 传智 Python基础班+就业班+课件 【最新完整无加密视频课程】
点击了解更多Python课程>>> 传智 Python基础班+就业班+课件 [最新完整无加密视频课程] 直接课程目录 python基础 linux操作系统基础) 1-Linux以及命 ...
- 示例vue 的keep-alive缓存功能的实现
本篇文章主要介绍了vue 的keep-alive缓存功能的实现,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下.如有不足之处,欢迎批评指正. Vue 实现组件信息的缓存 当我们 ...
- crond定时操作 crontab
* * * * * 分别表示 分钟 小时 日 月 星期(0-6) 30 17,28,19 * * * 或 30 17-19 * * * 在每天的17-19小时半点时刻执行 30 8-18 ...
- 3.layhm框架的流程与Boot类启动
思路 在项目根目录里新建好对应的目录 cmd里在项目根目录里,composer init初使化,一路回车 把要自动加载的文件和目录定在composer.json文件的autoload里,file是自动 ...
- redis+PHP消息队列实现及应用
学习视频: http://www.imooc.com/learn/852 学习笔记: https://blog.csdn.net/qq_33862644/article/details/7938564 ...
- WZK的减肥计划
WZK 的减肥计划(plan.cpp/ plan.in/ plan.out)问题描述:WZK 发现他的体重正迅猛的上升着,对此他感到非常焦虑,想要制定出一套完美的减肥计划. 于是 WZK 翻阅资料,查 ...
- ZOJ 2314 (sgu 194) Reactor Cooling (无源汇有上下界最大流)
题意: 给定n个点和m条边, 每条边有流量上下限[b,c], 求是否存在一种流动方法使得每条边流量在范围内, 而且每个点的流入 = 流出 分析: 无源汇有上下界最大流模板, 记录每个点流的 in 和 ...
- 如何提高UDP的可靠性
TCP是通过确认机制和超时重传机制实现可靠传输 UDP UDP它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频.视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数 ...