📜  Java Servlet中ServletConfig和ServletContext的区别(1)

📅  最后修改于: 2023-12-03 14:42:16.057000             🧑  作者: Mango

Java Servlet中ServletConfig和ServletContext的区别

在Java Servlet中,ServletConfig和ServletContext是两个非常重要的概念。它们都是Servlet的上下文对象,但在使用时却有着不同的作用和用途。

ServletConfig

ServletConfig对象代表了当前Servlet在web.xml配置文件中所配置的参数信息。每一个Servlet实例都会对应一个ServletConfig对象,Servlet可以通过调用getServletConfig()方法获取该对象。

获取配置参数

在web.xml中配置一个参数并在Servlet中进行读取可以使用以下示例代码:

public class MyServlet extends HttpServlet {
    private String myParam;
    
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
        myParam = config.getInitParameter("myParam");
    }
}

其中,init()方法在Servlet实例初始化时被调用,即在Servlet被创建时执行,通过config.getInitParameter()方法可以获取所配置的参数值。

获取Servlet名称和Servlet Context

除了读取参数信息以外,ServletConfig对象还可以获取当前Servlet的名称和Servlet上下文信息。

public class MyServlet extends HttpServlet {
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
        String servletName = config.getServletName();
        ServletContext context = config.getServletContext();
    }
}
ServletContext

ServletContext对象代表了整个Web应用程序的上下文环境。它是所有Servlet实例之间共享的对象,并且可以通过调用getServletContext()方法获取该对象。

获取Web应用程序信息

ServletContext对象可以用于获取Web应用程序的全局信息。

public class MyServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletContext context = getServletContext();
        String appName = context.getServletContextName();
        String serverInfo = context.getServerInfo();  
        String contextPath = context.getContextPath();
    }
}

其中,getServletContextName()方法用于获取web.xml中所配置的元素中的值;getServerInfo()方法用于获取Web服务器的信息,例如Tomcat/9.0.52;getContextPath()方法用于获取当前Web应用的上下文路径。

ServletContext作为共享数据存储容器

ServletContext对象还可以作为共享数据存储容器使用。比如,我们需要在各个Servlet之间共享某些变量,那么就可以将这些变量存放在ServletContext对象中。

public class MyServlet1 extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletContext context = getServletContext();
        context.setAttribute("count", 1);
    }
}

public class MyServlet2 extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletContext context = getServletContext();
        Integer count = (Integer)context.getAttribute("count");
        count++;
        context.setAttribute("count", count);
    }
}

在MyServlet1中初始化了count变量,并将其存放在ServletContext对象中。在MyServlet2中再次读取并修改该变量,确保在整个Web应用中都能使用该变量。

总结
  • ServletConfig对象代表了当前Servlet在web.xml配置文件中所配置的参数信息和当前Servlet的上下文信息,每一个Servlet实例都会对应一个ServletConfig对象。
  • ServletContext对象代表了整个Web应用程序的上下文环境,是所有Servlet实例之间共享的对象。ServletContext对象可以用于获取Web应用程序的全局信息,也可以作为共享数据存储容器使用。