Servelt上下文

本文详细介绍了ServletContext接口的作用及其在Web应用程序中的应用。解释了如何通过此接口进行上下文属性的设置和获取,初始化参数的访问,以及如何获取资源的URL。同时讨论了其在分布式容器中的特性。
摘要由CSDN通过智能技术生成

 WEB应用程序是Servlet,jsp页面,标签组件和JavaBean组合而成的。

ServletContext接口简介:

ServletContext接口用来定义了一个Servlet的环境对象。也可是认为这是多个客户端共享的信息,它与session的区别在于应用范围的不同,session只对应于一个用户。ServletContext接口定义了运行servletweb应用的servlet视图。容器供应商负责提供servlet容器内ServletContext接口的实现。使用ServletContext对象,servlet可以记录事件日志,获取资源的URL地址,并且设置和保存上下文内可以访问的其他servlet的属性。
ServletContextweb的已知路径为根路径。比如,假定一个servlet上下文位于http://www.sun.com/products。以/products请求路径开头的所有请求,已知为上下文路径,被路由到和该ServletContext关联的web应用。

ServletContext接口作用域:

容器中部署的每一个 web 应用都有一个 ServletContext 接口的实例对象与之关联。如果容器被分布在多个虚拟机上,一个 web 应用将在每一个 VM 中有一个 ServletContext 实例。
 
不作为 web 应用一部分部署的容器中的 servlet 默认是“默认” web 应用的一部分,有一个默认的 ServletContext 在分布式容器中。默认 ServletContext 是非分布式的,并且必须只存在于一个 VM 中。
 
初始化参数:
ServletContext 接口的初始化参数允许 servlet 访问与 web 应用相关的上下文初始化参数,这些由应用开发人员在部署描述符中指定:
 
getInitParameter
getInitParameterNames
 
应用开发人员利用初始化参数传送配置信息。典型的例子是 web 管理员的 e-mail 地址或者一个持有关键数据的系统名称。
 
上下文属性:
servlet 可以通过名称将对象属性绑定到上下文。任何绑定到上下文的属性可以被同一个 web 应用的其他 servlet 使用。 ServletContext 接口的下列方法允许访问这种功能:
 
setAttribute
getAttribute
getAttributeNames
removeAttribute
 
分布式容器中的上下文属性:
上下文属性对于创建它们的 VM 来说是本地的。这防止 ServletContext 属性存储于分布式容器的共享内存中。当信息需要在运行于分布式环境中的 servlet 之间共享时,信息被放入会话中(参见第 7 章“会话”),存储于数据库中,或者存储于 EJB 组件中。
 
资源:
ServletContext接口通过下列方法提供对web应用组成的静态内容文档层级的直接访问,包括HTMLGIFJPEG文件:
 
getResource
getResourceAsStream
 
getResource getResourceAsStream 方法以“ / ”开头的字符串为参数,它指定上下文根路径的资源相对路径。文档的层级可能存在于服务器的文件系统, war 文件,远程服务器或者在一些其它位置中。
 
这些方法不用来获取动态内容。比如,在一个支持 JSP 规范 1 的容器中, getResource("/index.jsp") 这种形式的方法调用将返回 JSP 源代码,而不是处理后的输出。关于访问动态内容的更多信息参见第 8 章“转发请求”。
 
Web 应用资源的完整列表可以使用 getResourcePaths(String path) 方法访问。该方法语义的完整信息可以在本规范的 API 文档中找到。
 
多个主机和ServletContext:
Web服务器可能支持一个服务器上多个逻辑主机共享一个IP地址。这功能有时被称为“虚拟主机”。这种情况下,每一个逻辑主机必须有它自己的servlet上下文或者servlet上下文组。Servlet上下文不可以被多个虚拟主机共享。
 
重载考虑
尽管容器供应商因为对于易于开发而实现的类加载不做要求,但是任何那样的实现必须确保所有它们可能使用 2 的所有 servlet 和类,被加载在单个类加载器作用域内。必须保证应用应该如开发人员预想的那样运转。作为开发辅助,绑定监听器的会话通知的完整语义应当由容器支持,在类加载上会话终止的监听上使用。
 
上一代的容器创建新的类加载器以加载 servlet ,这和用来加载 servlet 上下文中使用的其他 servlet 或者类的类加载器不同。这可能造成 servlet 上下文内的对象引用指向一个意想不到的类或对象,造成意想不到的行为。需要阻止由新一代类加载器所引发的问题。
 
临时工作目录:
每一个 servlet 上下文都需要一个临时存储目录。 Servlet 容器必须为每一个 servlet 上下文提供一个私有的临时目录,并且使它可以通过 javax.servlet.context.tempdir 上下文属性可用。这些属性关联的对象必须是 java.io.File 类型。
 
这项需求认可了很多 servlet 引擎实现中提供的常见便利。容器不需要在 servlet 重启时维持临时目录的内容,但是需要确保一个 servlet 上下文的临时目录的内容对于该 servlet 容器上运行的其他 web 应用的 servlet 上下文不可见。
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值