`
xiaoyixiao
  • 浏览: 7655 次
社区版块
存档分类
最新评论

ServletContext的作用

    博客分类:
  • j2ee
阅读更多
ServletContext,是一个全局的储存信息的空间,服务器开始,其就存在,服务器关闭,其才释放。request,一个用户可有多个;session,一个用户一个;而servletContext,所有用户共用一个。所以,为了节省空间,提高效率,ServletContext中,要放必须的、重要的、所有用户需要共享的线程又是安全的一些信息。

换一种方式说吧,运行在JAVA虚拟机中的每一个Web应用程序都有一个与之相关的Servlet上下文。ServletContext对象是Web服务器中的一个已知路径的根,Servlet上下文被定位于http://localhost:8080/项目名.以 /项目名 请求路径(称为上下文路径)开始的所有请求被发送到与此ServletContext关联的Web应用程序。一个ServletContext对象表示了一个Web应用程序的上下文。

Servlet上下文:Servlet上下文提供对应用程序中所有Servlet所共有的各种资源和功能的访问。Servlet上下文API用于设置应用程序中所有Servlet共有的信息。Servlet可能需要共享他们之间的共有信息。运行于同一服务器的Servlet有时会共享资源,如JSP页面、文件和其他Servlet。

举例:

如,做一个购物类的网站,要从数据库中提取物品信息,如果用session保存这些物品信息,每个用户都访问一便数据库,效率就太低了;所以要用来Servlet上下文来保存,在服务器开始时,就访问数据库,将物品信息存入Servlet上下文中,这样,每个用户只用从上下文中读入物品信息就行了。



3.1 ServletContext接口简介

ServletContext接口定义了运行servlet的web应用的servlet视图。容器供应商负责提供servlet容器内ServletContext接口的实现。使用ServletContext对象,servlet可以记录事件日志,获取资源的URL地址,并且设置和保存上下文内可以访问的其他servlet的属性。

ServletContext以web的已知路径为根路径。比如,假定一个servlet上下文位于http://www.mycorp.com/catalog。以/catalog请求路径开头的所有请求,已知为上下文路径,被路由到和该ServletContext关联的web应用。

3.2 ServletContext接口作用域

容器中部署的每一个web应用都有一个ServletContext接口的实例对象与之关联。如果容器被分布在多个虚拟机上,一个web应用将在每一个VM中有一个ServletContext实例。

不作为web应用一部分部署的容器中的servlet默认是“默认”web应用的一部分,有一个默认的ServletContext。在分布式容器中。默认ServletContext是非分布式的,并且必须只存在于一个VM中。

3.3 初始化参数

ServletContext接口的初始化参数允许servlet访问与web应用相关的上下文初始化参数,这些由应用开发人员在部署描述符中指定:

getInitParameter

getInitParameterNames

应用开发人员利用初始化参数传送配置信息。典型的例子是web管理员的e-mail地址或者一个持有关键数据的系统名称。

3.4 上下文属性

servlet可以通过名称将对象属性绑定到上下文。任何绑定到上下文的属性可以被同一个web应用的其他servlet使用。ServletContext接口的下列方法允许访问这种功能:

setAttribute

getAttribute

getAttributeNames

removeAttribute

3.4.1 分布式容器中的上下文属性

上下文属性对于创建它们的VM来说是本地的。这防止ServletContext属性存储于分布式容器的共享内存中。当信息需要在运行于分布式环境中的servlet之间共享时,信息被放入会话中(参见第7章“会话”),存储于数据库中,或者存储于EJB组件中。

3.5 资源

ServletContext接口通过下列方法提供对web应用组成的静态内容文档层级的直接访问,包括HTML,GIF和JPEG文件:

getResource

getResourceAsStream

getResource和getResourceAsStream方法以“/”开头的字符串为参数,它指定上下文根路径的资源相对路径。文档的层级可能存在于服务器的文件系统,war文件,远程服务器或者在一些其它位置中。

这些方法不用来获取动态内容。比如,在一个支持JSP规范1的容器中,getResource("/index.jsp")这种形式的方法调用将返回JSP源代码,而不是处理后的输出。关于访问动态内容的更多信息参见第8章“转发请求”。

Web应用资源的完整列表可以使用getResourcePaths(String path)方法访问。该方法语义的完整信息可以在本规范的API文档中找到。

3.6 多个主机和ServletContext

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

3.7 重载考虑

尽管容器供应商因为对于易于开发而实现的类加载不做要求,但是任何那样的实现必须确保所有它们可能使用2的所有servlet和类,被加载在单个类加载器作用域内。必须保证应用应该如开发人员预想的那样运转。作为开发辅助,绑定监听器的会话通知的完整语义应当由容器支持,在类加载上会话终止的监听上使用。

上一代的容器创建新的类加载器以加载servlet,这和用来加载servlet上下文中使用的其他servlet或者类的类加载器不同。这可能造成servlet上下文内的对象引用指向一个意想不到的类或对象,造成意想不到的行为。需要阻止由新一代类加载器所引发的问题。

3.7.1 临时工作目录

每一个servlet上下文都需要一个临时存储目录。Servlet容器必须为每一个servlet上下文提供一个私有的临时目录,并且使它可以通过javax.servlet.context.tempdir上下文属性可用。这些属性关联的对象必须是java.io.File类型。

这项需求认可了很多servlet引擎实现中提供的常见便利。容器不需要在servlet重启时维持临时目录的内容,但是需要确保一个servlet上下文的临时目录的内容对于该servlet容器上运行的其他web应用的servlet上下文不可见。
分享到:
评论

相关推荐

    ServletContext与ServletConfig关系

    在 Servlet 编程中,ServletConfig 和 ServletContext 两个对象经常被混淆,然而它们有着截然不同的作用域和用途。 首先, lets 看看 ServletConfig 对象。ServletConfig 对象是 Servlet 的配置对象,用于存储 ...

    第21章 Cookie和Session.pdf

    4.3 ServletContext作用 ServletContext可以用来存储全局变量、监听事件、初始化参数等,它在整个Web应用的生命周期内有效。 4.4 ServletContext特点 - 跨Servlet通信 - 存储全局数据 - 初始化参数 - 监听器注册 ...

    jsp与web状态管理笔记

    10. **ServletContext作用域**:除了Session,JSP还有其他作用域,如Page、Request和ServletContext。ServletContext在整个Web应用中有效,适合存储全局配置信息。 以上就是关于JSP与Web状态管理的一些关键知识点,...

    ServletContext与application异同.docx

    1. **ServletContext的生命周期与作用** - 当Tomcat或其他Web服务器启动并加载Web应用时,会为该应用创建一个唯一的`ServletContext`实例。这个实例在Web应用的整个生命周期内都是存在的,直到Web应用被卸载。 - `...

    2021-2022计算机二级等级考试试题及答案No.12079.docx

    - **Application**:也称为ServletContext作用域,存储在此处的数据在整个应用生命周期内都是可见的,除非应用重启。 - **答案解析**:题目要求在多个页面间共享数据,因此应选择`request`和`session`作用域。因为`...

    servletcontext详解

    #### 二、`ServletContext`的作用 `ServletContext`接口提供了多种方法,用于在Web应用范围内存取共享数据、访问当前Web应用的资源、获取Servlet容器的相关信息等。 ##### 1. 存取共享数据的方法 - **`...

    ServletContext.pdf

    #### 二、ServletContext的作用 1. **数据共享**:`ServletContext`可以被Web应用中的所有Servlet实例共享,这样就可以通过它来存储一些全局性的数据,便于各个Servlet之间进行数据传递和共享。 2. **获取初始化...

    Java ServletContext对象用法解析

    ServletContext 对象有很多重要的作用,包括: 1. 获取 Web 应用程序中任何资源的绝对路径:`String path = context.getRealPath("相对于该 web 应用的相对地址");` 2. 作为一个域对象(存储数据的区域):...

    访问或添加三个范围的属性与获取Request-Session-ServletContext-Response对象.rar

    这些对象在Servlet编程中起到关键作用,帮助开发者在不同范围内存储和共享数据。 1. HttpServletRequest对象: Request对象代表客户端的HTTP请求,用于获取请求参数、请求头、请求路径等信息。通过`request....

    JavaWeb新版教程Servlet-1vlet-ServletContext对象作用的演示.avi

    JavaWeb新版教程Servlet-1vlet-ServletContext对象作用的演示.avi

    ServLetContext基础

    作用域:整个项目 生命周期:服务器启动到服务器关闭 如何使用: 三种创建方式: ServletContext sc=this.getServletContext(); ServletContext sc1=this.getServletConfig().getServletContext(); ServletContext ...

    request、session作用域的理解

    * Application 作用域是通过 ServletContext 接口实现的 * Application 作用域的信息共享是通过 setAttribute 和 getAttribute 方法来实现的 * Application 作用域的信息在应用程序停止后无效 作用域的概念: * ...

    servlet之ServletContext简介_动力节点Java学院整理

    首先,让我们来了解一下ServletContext的作用。在web.xml文件中,我们可以使用标签来配置初始化参数,这些参数可以在Servlet程序中通过ServletContext对象来获取。在ServletConfig对象中,getInitParameter(String ...

    web.xml中</context-param>等配置的作用

    web.xml中等配置的作用 了解 web.xml 的配置信息和加载顺序对于理解框架的流程至关重要。在 web.xml 中,<context-param> 配置起着非常重要的作用,它在 web 项目启动时发挥着关键的作用。 首先,让我们来了解一下...

    JSP的四种作用范围总结

    - `application` 对象是 `javax.servlet.ServletContext` 类型,它在整个Web应用程序的生命周期内都有效。这意味着无论哪个用户、哪个会话,只要应用运行,设置在application作用域内的属性都能访问。 JSP内置对象...

    jsp的四个作用域

    存放在ServletContext对象中。它的存活时间是最长的,如果不进行手工删除,它们就一直可以使用。例如,在index.jsp页面中设置一个变量,然后在整个应用程序中都可以访问这个变量。 使用jsp的四个作用域需要根据实际...

    Spring Bean的作用域.docx

    5. **Application作用域**:这个作用域的Bean在`ServletContext`的生命周期内存在,也就是说,它们在整个Web应用程序中只存在一个实例。这些Bean适用于需要跨多个用户会话共享数据的情况,例如,全局的配置信息或...

    JSP的九个内置对象及四个作用域

    Application 对象是javax.servlet.ServletContext类型,“Application”对象负责提供应用程序在服务器运行中的一些全局信息,常用的方法有getMimeType和getRealPath等,servlet的循环通过调用getServletConfig()....

    ServletContextDemo代码源文件包

    它的作用域覆盖整个Web应用,所以任何在`ServletContext`中存储的信息对所有用户和Servlet都是可见的。 2. **共享数据**: 在`ServletContextDemo`中,可能会有一个Servlet或JSP用于设置累加数据,而其他Servlet或...

    java内置对象简介、四种属性范围的一些源代码

    这里主要涉及四个核心的内置对象:PageContext、HttpServletRequest、HttpSession和ServletContext,它们各自对应于四种不同的作用域。 1. PageContext对象:PageContext是JSP页面内部的数据存储区,它的生命周期仅...

Global site tag (gtag.js) - Google Analytics