多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# `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](https://img.kancloud.cn/b1/7a/b17aaa457756c0634cb3729b85a7c0ec_650x84.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()`:返回运行 servlet 的 servlet 容器的名称和版本。 `public String getContextPath()`:返回 Web 应用的上下文路径。 要获得完整的方法列表,请参阅[官方文档](https://docs.oracle.com/javaee/7/api/javax/servlet/ServletContext.html)。