原文: https://beginnersbook.com/2013/05/servlet-context/

在上一篇教程中,我们讨论了ServletConfig,Servlet 容器在初始化期间为每个 Servlet 创建ServletConfig对象。ServletConfigServletContext之间的主要区别在于,与ServletConfig不同,ServletContext每个 Web 应用创建一次,即ServletContext对象对 Web 应用中的所有 servlet 都是通用的。

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

  1. ServletContext sc;
  2. public void init(ServletConfig scfg)
  3. {
  4. sc=scfg.getServletContext();
  5. }

一旦我们有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 中获取参数名称和值。

  1. <context-param>
  2. <param-name>email_id</param-name>
  3. <param-value>[email protected]</param-value>
  4. </context-param>

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

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

DemoServlet.java

  1. import java.io.*;
  2. import javax.servlet.*;
  3. import javax.servlet.http.*;
  4. public class DemoServlet extends HttpServlet{
  5. public void doGet(HttpServletRequest request,HttpServletResponse response)
  6. throws ServletException,IOException
  7. {
  8. response.setContentType("text/html");
  9. PrintWriter pwriter=response.getWriter();
  10. //ServletContext object creation
  11. ServletContext scontext=getServletContext();
  12. //fetching values of initialization parameters and printing it
  13. String userName=scontext.getInitParameter("uname");
  14. pwriter.println("User name is="+userName);
  15. String userEmail=scontext.getInitParameter("email");
  16. pwriter.println("Email Id is="+userEmail);
  17. pwriter.close();
  18. }
  19. }

web.xml

  1. <web-app>
  2. <servlet>
  3. <servlet-name>BeginnersBook</servlet-name>
  4. <servlet-class>DemoServlet</servlet-class>
  5. </servlet>
  6. <context-param>
  7. <param-name>uname</param-name>
  8. <param-value>ChaitanyaSingh</param-value>
  9. </context-param>
  10. <context-param>
  11. <param-name>email</param-name>
  12. <param-value>[email protected]</param-value>
  13. </context-param>
  14. <servlet-mapping>
  15. <servlet-name>BeginnersBook</servlet-name>
  16. <url-pattern>/context</url-pattern>
  17. </servlet-mapping>
  18. </web-app>

输出:

`ServletContext`接口 - 图1

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 应用的上下文路径。

要获得完整的方法列表,请参阅官方文档