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上下文是完全不可见的。

文档信息

Servlet 2.4 规范之第四篇:Servlet上下文的更多相关文章

  1. JavaWeb学习总结第四篇--Servlet开发

    Servlet开发 用户在浏览器中输入一个网址并回车,浏览器会向服务器发送一个HTTP请求.服务器端程序接受这个请求,并对请求进行处理,然后发送一个回应.浏览器收到回应,再把回应的内容显示出来.这种请 ...

  2. Servlet 2.4 规范之第三篇:Servlet生命周期

        SRV.2.3    Servlet生命周期 servlet有着定义良好且明确的生命周期,它定义了servlet以怎样的方式加载和实例化.初始化.怎样处理客户端请求.以及怎样停止服务.生命周期 ...

  3. Servlet 2.4 规范之第七篇:过滤器

    过滤器是一套java组件,用于在请求—>资源—>应答的这一过程中即时转换处理负载和头信息. 本章讲述了Servlet 2.4 API中一些类和方法,这些类和方法提供了一套轻量级框架用于过滤 ...

  4. Servlet 2.4 规范之第六篇:响应

    响应对象封装了服务端返回给客户端的所有信息.在HTTP协议中,这些信息通过HTTP头和消息体传送. SRV.5.1    缓冲 出于效率考量,servlet容器可以缓冲输出数据,但这并非强制要求.常见 ...

  5. Servlet 2.4 规范之第五篇:请求

    request对象封装了来自客户端的所有请求信息.在HTTP协议中,客户端发给服务端的所有信息都是通过request对象的请求头和请求体来传送的.           SRV.4.1    HTTP协 ...

  6. javaweb回顾第四篇Servlet异常处理

    前言:很多网站为了给用户很好的用户体验性,都会提供比较友好的异常界面,现在我们在来回顾一下Servlet中如何进行异常处理的. 1:声明式异常处理 什么是声明式:就是在web.xml中声明对各种异常的 ...

  7. SpringBoot系列教程web篇Servlet 注册的四种姿势

    原文: 191122-SpringBoot系列教程web篇Servlet 注册的四种姿势 前面介绍了 java web 三要素中 filter 的使用指南与常见的易错事项,接下来我们来看一下 Serv ...

  8. Servlet 2.4 规范之第一篇:概览

          写在前面的话: 本系列是对<Java Servlet Specification Version 2.4>的完全翻译,力争但不保证完美表达出英文原文的思想内涵.如有疏漏之处,还 ...

  9. Servlet 2.4 规范之第二篇:Servlet接口

    Servlet接口是Servlet API的最核心抽象类.所有的servlets都直接实现了这个接口,或者以更通用的方式继承了这个接口的实现类.Servlet API自带了两个实现了Servlet接口 ...

随机推荐

  1. python3和Python2的区别

    一.print函数 python2 的 print 声明已经被 print() 函数取代了,这意味着我们必须包装我们想打印在小括号中的对象 二.通过input()解析用户的输入 python3中inp ...

  2. 【Python学习之五】高级特性5(切片、迭代、列表生成器、生成器、迭代器)

    5.迭代器 由之前的生成器可知,for循环用于可迭代对象:Iterable.包括集合数据类型: list.tuple.dict.set.str 等,以及两种生成器.判断迭代器,使用 isinstanc ...

  3. 11Vim文本编辑器

    Vim文本编辑器 在Linux系统中一切都是文件,而配置一个服务就是在修改其配置文件的参数. Vim提供了三种模式:命令模式.输入模式.末行模式 1.命令模式 每次运行Vim编辑器时,默认进入命令模式 ...

  4. day24 02 单继承(派生)

    day24 02 单继承(派生) 1.首先来看一个简单的例子 比如: 狗类的属性有:吃,喝,看门 鸟类的属性有:吃,喝,下蛋 看门和下蛋就是这两种动物不同的属性,而吃喝是两个共同的属性 以下代码实现了 ...

  5. 在windows7 32ibt安装MongoDB数据库的方法及连接失败解决方案

    参考 https://www.cnblogs.com/cnblogs-jcy/p/6734889.html http://yunkus.com/mongodb-install-config-in-wi ...

  6. Java技术——Java泛型详解

    .为什么需要泛型 转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52230032 泛型在Java中有很重要的地位,网上很多文章罗列各种 ...

  7. 《Scrum实战》第1次课课后任务

    1.必做任务:从知行角度总结T平台 从知行角度总结T平台 头(知识,学习) 做得好的 宣贯会 引入敏捷思想 敏捷宣言 敏捷原则 质量风险前移原则 引入最佳实践 包括了XP的大部分实践 不足 项目管理框 ...

  8. spring boot 启动慢的原因

    停留在Spring logo那里差不多4分钟 SpringBoot启动慢的原因应该是某些应用占用了spring config server默认的端口8888,然后SpringCloud进程有些引用了s ...

  9. python补漏----isinstance 和 issubclass

    一.isinstance Python 中的isinstance函数 isinstance是Python中的一个内建函数 语法: isinstance(object, classinfo) 如果参数o ...

  10. 微信小程序开发 -- 获取当前页面路径

    Page.prototype就是this: 你在任何一个Page里面都可以使用route字段和setData()函数: 示例代码: /** * 生命周期函数--监听页面加载 */ onLoad: fu ...