ServletContext详解
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.lajiaowang.com/new。以/new请求路径开头的所有请求,已知为上下文路径,被路由到和该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详解 #### 一、概述 `ServletContext`接口是Servlet与Servlet容器之间进行通信的重要接口之一。当Servlet容器启动一个Web应用时,会为该应用创建一个`ServletContext`对象,这个对象在整个Web...
【ServletContext详解】 Servlet上下文(ServletContext)是Java Web开发中的一个重要概念,它是服务器为每个Web应用程序创建的一个全局共享对象。这个对象在整个Web应用中独一无二,所有的Servlet都可以访问它,...
java web servletContext和ServletConfig详解
### ServletContext接口详解 在Java Web开发中,`ServletContext`接口扮演着至关重要的角色,它提供了应用程序上下文的全局视图,使得多个Servlet之间能够共享数据,并且为Servlet容器提供了访问资源、初始化参数...
JavaWeb开发技术是现代互联网应用开发的重要组成部分,汪大乐所著的《Javaweb开发技术详解》一书深入浅出地介绍了这一领域的核心概念和技术。JavaWeb开发主要涉及Servlet、JSP、JSTL、过滤器、监听器、MVC设计模式...
Spring 获取 WebApplicationContext、ApplicationContext 几种方法详解 在 Spring 框架中,获取 WebApplicationContext 和 ApplicationContext 对象是非常重要的,因为它们提供了访问 Spring 容器中的 Bean 对象的...
Java 文件路径详解 Java 文件路径详解是一种在 Java 中获取文件路径的方式。它可以将文件路径转换为 InputStream,以便于读取文件的内容。在 Java 中,有两种方式可以获取文件路径,即使用 Class....
WEB.xml详解主要涉及了Java EE Web应用程序的标准配置文件web.xml的详细使用说明,这是Servlet规范中定义的一个配置文件,用于配置web应用的初始化参数、servlet和filter、监听器等组件。 首先,web.xml文件在Web...
Web.xml 中的 listener、filter、servlet 加载顺序及其详解 在 Web 应用程序中,web.xml 文件扮演着非常重要的角色,它定义了 Web 应用的结构和配置。其中,listener、filter、servlet 是三个非常重要的概念,它们...
### JSP基础精华详解 #### 四种会话跟踪方式 在JSP技术中,为了保持用户的会话状态,有多种方法可供选择。这四种主要的会话跟踪方式分别是:`Session`、`Cookie`、隐藏表单域以及URL重写。 ##### 1. Session `...
- **application对象**:`javax.servlet.ServletContext`,代表整个Web应用程序的上下文。它用于共享全局信息,如配置信息,`application.getAttribute()`和`application.setAttribute()`用于在所有会话间共享数据...
5. **`application`**:类型为`javax.servlet.ServletContext`,代表整个Web应用程序。它可以用来共享全局信息,比如配置信息或者统计信息。 6. **`out`**:类型为`javax.servlet.jsp.JspWriter`,用于向客户端输出...
Tomcat 中用 web.xml 控制 Web 应用详解 Tomcat 中 web.xml 文件是 Web 应用的核心配置文件,负责管理 Web 应用的生命周期、Servlet 的加载顺序、Filter 的配置等。下面对 web.xml 文件中的重要元素进行详细解释。 ...
### Spring七大功能详解 #### 一、核心容器(Spring Core) **核心容器**提供了Spring框架的基础功能,通过Bean的方式组织和管理Java应用中的各种组件及其之间的关系。在Spring框架中,Bean Factory扮演着核心角色...
这些参数可以被Servlet容器在Web应用程序启动时读取,并传递给`ServletContext`对象。`context-param`包含以下子元素: 1. `<description>`:提供关于参数的描述性信息。 2. `<param-name>`:指定参数的唯一名称。 3...
### Web.xml配置详解 #### 一、Web.xml概述 `web.xml` 文件是Java Web应用程序的核心配置文件之一,主要用于配置应用程序级别的各种初始化参数、监听器、过滤器、Servlet映射等。通过`web.xml`,开发者可以灵活地...
6.5.1 servletcontext接口 226 6.5.2 页面访问量统计实例 228 6.6 请求转发 231 6.6.1 requestdispatcher接口 232 6.6.2 得到requestdispatcher对象 232 6.6.3 请求转发的实例 233 6.6.4 sendredirect()和...
**web.xml 文件详解** 在Java Web应用程序中,`web.xml`文件是部署描述符(Deployment Descriptor),它是配置应用核心行为的重要文件。它定义了Servlet、过滤器、监听器、会话超时、错误页面等关键组件,使得...
ServletConfig对象还与当前Web应用程序的ServletContext对象关联,ServletContext是整个Web应用的共享环境,提供了获取全局信息和资源的方法。 然后,Servlet容器创建Servlet实例。一旦Servlet对象被创建,容器会...
6.5.1 servletcontext接口 226 6.5.2 页面访问量统计实例 228 6.6 请求转发 231 6.6.1 requestdispatcher接口 232 6.6.2 得到requestdispatcher对象 232 6.6.3 请求转发的实例 233 6.6.4 sendredirect()和...