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. 【Git版本控制】git将单个文件回退到某一版本

    暂定此文件为a.jsp 1.进入到a.jsp所在目录,通过 git  log a.jsp查看a.jsp的更改记录 2.找到想要回退的版本号:例如 fcd2093 通过 git reset   fcd2 ...

  2. 服务器TIME_WAIT和CLOSE_WAIT分析和解决办法

    先上两张图: 查看TIME_WAIT和CLOSE_WAIT数的命令: netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a ...

  3. 如何用纯 CSS 和 D3 创作一只扭动的蠕虫

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/QBQJMg 可交互视频 ...

  4. python导出开发环境

    1.导出开发环境的依赖包 本地开发完后,再把代码给别人之前,需要 pip freeze > pip123.txt 2.其他环境安装依赖包 pip install -r pip123.txt 其他 ...

  5. python 取余运算

    python中取余运算逻辑如下: 如果a 与d 是整数,d 非零,那么余数 r 满足这样的关系: a = qd + r , q 为整数,且0 ≤ |r| < |d|. 经过测试可发现,pytho ...

  6. Python9-网络编程4-day33

    解决黏包问题: 在传输大量数据之前,先告诉接收端要发送数据大小 如果想更漂亮的解决问题,可以通过struct模块来定制协议为什么会出现黏包现象: 首先只有在tcp协议中才会出现黏包现象 是因为tcp协 ...

  7. build.xml: 21: Class not found: javac1.8

    在eclipse里运用ant时经常碰到class not found的错误提示,从而编译失败,其实是eclipse中本身的ant版本太老造成该的,但我今天安装的ant是1.8.4,感觉已经很新了,但编 ...

  8. java处理excel

    JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Windows操作系统也可以通过 ...

  9. 异常 ndroid.view.InflateException: Binary XML file line #8: Error inflating class com.ouyang.test.MyView

    发现自定义view时出现ndroid.view.InflateException: Binary XML file line #8: Error inflating class com.ouyang. ...

  10. SVN 删除所有目录下的“.svn”文件夹,让文件夹脱离SVN控制

    SVN 删除所有目录下的“.svn”文件夹,将如下语句拷备到记事本,并保存为 *.reg,双击导入注册表,在文件夹右键中就多了一条“Delete SVN Folders”,点击就可以删处此目录下的所有 ...