ServletContext

每个Web应用仅有一个ServletContext对象(webapps 下的每个目录都是一个 Web 应用)。

Web容器启动时创建,容器关闭或应用被卸载时结束。

该对象中保存了当前应用程序相关信息,

ServletContext 对象也被称为 Context 域对象。

ServletContext的存在,就是为了存放必须的、重要的、所有用户需要共享的、线程又是安全的一些资源信息,这样不仅节省了空间,还提高了效率。

获得 ServletContext 对象

四种方式:

  1. GenericServlet 的 getServletContext()

    1
    ServletContext servletContext = this.getServletContext();
  2. ServletConfig 的 getServletContext()

    1
    ServletContext servletContext = this.getServletConfig().getServletContext();
  3. HttpSession 的 getServletContext()

    1
    ServletContext servletContext = req.getSession().getServletContext();
  4. HttpServletRequest 提供的 getServletContext() 方法

    1
    ServletContext servletContext = req.getServletContext();

读取初始化参数

设置上下文初始化参数

web.xml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee">

<!--设置全局初始化参数 -->
<context-param>
<param-name>name1</param-name>
<param-value>value1</param-value>
</context-param>
<context-param>
<param-name>name2</param-name>
<param-value>value2</param-value>
</context-param>

</web-app>

调用接口中方法获取初始化参数

String getInitParameter(String name) 根据初始化参数名 name,返回对应的初始化参数值。

Enumeration<String> getInitParameterNames() 返回 Web 应用所有上下文初始化参数名的枚举集合,如果该 Web 应用没有上下文初始化参数,则返回一个空的枚举集合。

数据通讯

void setAttribute(String name, Object object) 把一个 Java 对象与一个属性名绑定,并将它作为一个属性存放到 ServletContext 中。
参数 name 为属性名,参数 object 为属性值。

Object getAttribute(String name) 根据指定的属性名 name,返回 ServletContext 中对应的属性值。

void removeAttribute(String name) 从 ServletContext 中移除属性名为 name 的属性。

读取 Web 应用下的资源文件

Set getResourcePaths(String path) 返回一个 Set 集合,该集合中包含资源目录中的子目录和文件的名称。

String getRealPath(String path) 返回资源文件的真实路径(文件的绝对路径)。

URL getResource(String path) 返回映射到资源文件的 URL 对象。

InputStream getResourceAsStream(String path) 返回映射到资源文件的 InputStream 输入流对象。