📅  最后修改于: 2023-12-03 14:42:16.057000             🧑  作者: Mango
在Java Servlet中,ServletConfig和ServletContext是两个非常重要的概念。它们都是Servlet的上下文对象,但在使用时却有着不同的作用和用途。
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()方法可以获取所配置的参数值。
除了读取参数信息以外,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对象代表了整个Web应用程序的上下文环境。它是所有Servlet实例之间共享的对象,并且可以通过调用getServletContext()方法获取该对象。
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中所配置的
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应用中都能使用该变量。