# ServletContext 接口

> 原文： [https://beginnersbook.com/2013/05/servlet-context/](https://beginnersbook.com/2013/05/servlet-context/)

在上一篇教程中，我们讨论了 [ServletConfig](https://beginnersbook.com/2017/07/servletconfig-interface-with-example/) ，Servlet 容器在初始化期间为每个 Servlet 创建 ServletConfig 对象。 ServletConfig 和 ServletContext 之间的主要区别在于，与 ServletConfig 不同，ServletContext 每个 Web 应用程序创建一次，即 ServletContext 对象对 Web 应用程序中的所有 servlet 都是通用的。

这就是我们如何创建 ServletContext 对象。在这段代码中，我们在 init（）方法中创建对象，但是您可以在任何地方创建对象。

```java
ServletContext sc;
public void init(ServletConfig scfg)
{
    sc=scfg.getServletContext();
}
```

一旦我们有`ServletContext`对象，我们就可以使用`setAttribute()`方法设置`ServletContext`对象的属性。由于 ServletContext 对象可用于 Web 应用程序的所有 servlet，因此其他 servlet 可以使用`getAttribute()`方法从 ServletContext 对象中检索该属性。

**上下文初始化参数**
上下文初始化参数是您可以在部署描述符文件（web.xml 文件）中指定的参数名称和值对。您可以在此处指定 Web 应用程序中所有 servlet 都可访问的参数。

当我们部署 Web 应用程序时，Servlet 容器从 web.xml 文件中读取初始化参数，并使用它初始化 ServletContext 对象。我们可以使用 ServletContext 接口的`getInitParameter()`和`getInitParameterNames()`方法分别获取参数名称的参数值和枚举。

例如，这里我已经使用值指定了参数 email_id，因为这对所有 servlet 都是通用的，您可以在任何 servlet 中获取参数名称和值。

```java
<context-param>
<param-name>email_id</param-name>
<param-value>[email protected]</param-value>
</context-param>
```

#### ServletContext 完整示例：获取初始化参数

在此示例中，我们在 web.xml 文件中有两个上下文初始化参数（用户名和用户电子邮件），我们使用 getInitParameter（）方法获取 Servlet 中的值，该方法返回给定参数的值。

DemoServlet.java

```java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class DemoServlet extends HttpServlet{
   public void doGet(HttpServletRequest request,HttpServletResponse response)
   throws ServletException,IOException
   {
       response.setContentType("text/html");
       PrintWriter pwriter=response.getWriter();

       //ServletContext object creation
       ServletContext scontext=getServletContext();

       //fetching values of initialization parameters and printing it
       String userName=scontext.getInitParameter("uname");
       pwriter.println("User name is="+userName);
       String userEmail=scontext.getInitParameter("email");
       pwriter.println("Email Id is="+userEmail);
       pwriter.close();
   }
}
```

web.xml

```java
<web-app>
<servlet>
   <servlet-name>BeginnersBook</servlet-name>
   <servlet-class>DemoServlet</servlet-class>
</servlet>
<context-param>
   <param-name>uname</param-name>
   <param-value>ChaitanyaSingh</param-value>
</context-param>
<context-param>
   <param-name>email</param-name>
   <param-value>[email protected]</param-value>
</context-param>
<servlet-mapping>
   <servlet-name>BeginnersBook</servlet-name>
   <url-pattern>/context</url-pattern>
   </servlet-mapping>
</web-app>
```

**输出：**
![ServletContext Output](img/3187850f4d12ebb8ece0113b4ac71dfd.jpg)

## ServletContext 接口的方法

以下是 ServletContext 接口常用方法的列表。

**public String getInitParameter（String param）**：返回给定参数的值，如果参数不存在，则返回 null。

**public Enumeration getInitParameterNames（）**：返回上下文参数名称的枚举。

**public void setAttribute（String name，Object object）**：设置给定属性名称的属性值。

**public Object getAttribute（String name）**：返回给定名称的属性值，如果该属性不存在，则返回 null。

**public String getServerInfo（）**：eturns 运行 servlet 的 servlet 容器的名称和版本。

**public String getContextPath（）**：返回 Web 应用程序的上下文路径。
要获得完整的方法列表，请参阅官方文档 [](https://docs.oracle.com/javaee/7/api/javax/servlet/ServletContext.html) 。