文档章节

Servlet Specification V2.4——SRV.3 Servlet Context

悟空太多啦
 悟空太多啦
发布于 2015/12/20 23:53
字数 1282
阅读 7
收藏 0

SRV.3 Servlet Context

SRV.3.1 Introduction to the ServletContext Interface

        ServletContext接口定义了一个web应用程序的servlet视图,这些servlet就运行在此web应用程序中。Container的提供者负责提供container中ServletContext接口的实现。使用ServletContext对象,servlet可以记录时间,取得资源的引用URL,设置并存储context中其它servlet也可以可访问的attribute(set and store attributes that other servlets in the context can access)。

        ServletContext被root于web server中一个已知的路径。例如:一个servlet context可以被配置在http://www.google.com/catalog。作为context path,以request路径/catalog开始的所有请求,都会发送至与此ServletContext相关联的web application。

 

 

SRV.3.2 Scope of a ServletContext Interface

        每个发布到container中的web application都有一个ServletContext的实例与之相关联。如果container是分布式的运行在多台虚拟机上,那么web application将在每一个JVM上有一个ServletContext的实例。
        在container中,没有作为web application的一部分被部署的servlet,是“默认”web application隐含的一部分,并且有一个默认的ServletContext。在分布式container中,默认的ServletContext并不是分布式的,而是只存在于一个JVM中。

 

 

SRV.3.3 Initialization Parameters

        下面的ServletContext接口的方法允许servlet访问存取与web application相关联的context初始化参数,这些参数由应用程序开发者在部署描述符中描述。

  • getInitParameter

  • getInitParameterNames

        初始化参数被开发者用来传达配置信息。典型的情况是站点管理员的的email地址,或者持有关键资源的系统的名称(the name of a system that holds critical data)。

 

 

SRV.3.4 Context Attributes

        Servlet可以通过名称将一个对象作为属性绑定到context。所有与context绑定的属性都对于同一个web application中其他任何的servlet都是有效的。以下是ServletContext接口中支持这种功能的方法:

  • setAttribute

  • getAtrribute

  • getAtrributeNames

  • removeAttribute

SRV.3.4.1 Context Attributes in a Distributed Container

        Context的attribute只在对于context所在的JVM中有效。这防止了ServletContext的attribute在分布式container中成为共享的内存数据。当有信息需要在运行在分布式环境下的不同servlet之间共享时,这些信息应该被放到session中(参见SRV.7 Sessions),存在数据库中,或者set到一个EJB组件中。

 

 

SRV.3.5 Resourcess

        ServletContext接口只对web application中静态内容文档的层次结构提供了直接的存取的功能。,包括html,gif和jpeg文件,通过ServletContext接口的以下方法:

  • getResource

  • getResourceAsStream

        getResource和getResourceAsStream方法以一个以“/”开头的字符串作为参数,这个参数代表了资源相对于context的路径。这个文档的曾其结构可能会出现在server的文件系统里,web application存档文件里,或者一个远程服务器,甚至一些其他的位置。

        这些方法不是用来获取动态内容的。例如,在支持JSP规范的container中,一个形式为getResource("/index.jsp")的方法调用会返回这个 jsp的源代码,而不是jsp执行后的输出结果。参见SRV.8 Dispatching Request,以获取关于存取动态内容的更多信息。

        Web application中所有资源的列表可以通过使用getResourcePath(String path)方法获得。此方法的语法细则可以在servlet的API中找到。

 

 

SRV.3.6 Multiple hosts and Servlet Contexts

        Web server可以支持在一台服务器上多逻辑主机共享一个 IP地址,这种能力有时被称为“虚拟主机”。在这种情况下,每个逻辑主机必须有它自己的servlet context或者servlet context 的集合。servlet context不能被多个虚拟主机共享。

 

 

SRV.3.7 Reloading Considerations

        虽然container提供者不是必须为了方便开发者而实现class reloading的方案,任何这样的实现都必须明确,所有它们可能使用的servlet和class(An exception is system classes that the servlet may use in a different class loader),都只装载在单个class loader中,这样才能保证应用程序呈现出开发者所期望的行为。为了方便开发者,container应该提供完整的session绑定listener的通知,以便用来监控在class reloading之前的session终止(session termination upon class reloading)。

        上一代的container创建新的class loader来装载servlet,不同于被用来装载servlet context中其他servlet或者class的class loader(distinct from class loaders used to load other servlets or classes used in the servlet context)。

 

SRV.3.7.1 Temporary Working Directories

        每个servlet context都需要一个临时存储目录。Servlet container必须为每个servlet context提供一个私有的临时目录,并且通过javax.servlet.context.tempdir这个context attribute来使其可用。与这个attribute相关联的对象必须使java.io.File类型。
        这一点被公认为是习惯做法,很多servlet引擎都提供了这样的实现。当container重启时,并不被要求去保持这个临时目录下的内容,但是必须保证临时目录中的一个servlet context的内容对与container中其他web application的servlet context使不可见的。

© 著作权归作者所有

共有 人打赏支持
悟空太多啦
粉丝 20
博文 85
码字总数 70979
作品 1
南京
项目经理
web.xml中load-on-startup的含义

<servlet-mapping> <servlet-name>proResponse</servlet-name> <url-pattern>/test</url-pattern> </servlet-mapping> <servlet> <servlet-name>proResponse</servlet-name> <servlet-class>......

2012/02/21
0
0
servlet xml 配置详解

2013-11-08 09:04 161人阅读 评论(0) 收藏 举报 web.xmlmyeclipse 首先可以肯定的是,加载顺序与它们在 web.xml 文件中的先后顺序无关。即不会因为 filter 写在 listener 的前面而会先加载 ...

yiguangtia
2014/03/30
0
0
JPA/EJB3 Relationship

The Java Persistence API introduced in Java EE 5 is a subset of EJB 3 and replaces the persistence solution of EJB 2.0 CMP. JPA 1.0 has been defined as part of the EJB 3.0 speci......

Barudisshu
2014/09/21
0
0
web.xml中load-on-startup标签的含义

在servlet的配置当中,<load-on-startup>5</load-on-startup>的含义是: 标记容器是否在启动的时候就加载这个servlet。 当值为0或者大于0时,表示容器在应用启动时就加载这个servlet; 当是一...

随智阔
2014/04/02
0
0
Servlet 工作原理解析【转】

简介: Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础。因而掌握 Servlet 的工作原理是成为一名合格的 Java Web 技术开发人员的基本要求。本文将带...

磊神Ray
2011/09/01
0
3

没有更多内容

加载失败,请刷新页面

加载更多

打开eclipse出现an error has occurred see the log file

解决方法: 1,打开eclipse安装目录下的eclipse.ini文件; 2,打开的文本文件最后添加一行 --add-modules=ALL-SYSTEM 3,保存重新打开Eclipse。...

任梁荣
昨天
3
0
搞定Northwind示例数据库,无论哪个版本的SQLServer都受用

Northwind数据库 从这里可以找到突破口: http://social.msdn.microsoft.com/Forums/zh-CN/Vsexpressvb/thread/8490a1c6-9018-40c9-aafb-df9f79d29cde 下面是MSDN: http://msdn2.microsoft......

QQZZFT
昨天
1
0
mysql主从同步,安装配置操作

准备 两台mysql服务,我这里准备了如下: 主库:192.168.176.128 从库:192.168.176.131 如何在Linux上安装mysql服务,请看https://blog.csdn.net/qq_18860653/article/details/80250499 操作...

小致dad
昨天
3
0
一个手机装天下,走遍中国都不怕!

导读 “1200元(人民币,下同),微信支付,可以,你扫我。”来自西非马里共和国的展商Albert拿着手机,和一位买走他手鼓的中国游客用简单的汉语交流着。 近日,“第十四届中俄蒙经贸洽谈暨商品...

问题终结者
昨天
2
0
Redis的“死键”问题

大规模的数据库存储系统中,数据的生命周期管理是很有必要的;从业务角度发现过期数据,数据归档和数据碎片整理等。以MySQL为例,1个运行很久的TB级MySQL实例中,极有可能数百GB的数据,对业...

IT--小哥
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部