一、概述
ServletContext是Servlet容器中非常重要的部分,它提供了Servlet之间通信的渠道和Web应用程序级别的资源共享。
ServletContext的主要作用包括:
- 在Web应用程序中共享资源:ServletContext对象可以被所有的Servlet所共享,因此我们可以在任何一个Servlet或JSP页面中访问这个对象,并且通过它来获取服务器中的全局信息或者设置全局参数。
- 存储和获取Web应用程序级别的初始化参数:与每个Servlet配置在web.xml中的初始化参数不同,ServletContext可以为整个Web应用程序提供全局性的初始化参数。
- 向Web应用程序中的任何资源提供安全访问:可以通过ServletContext对象获取资源的真实路径,从而在应用程序中更加方便地提供访问这些资源的安全策略。
- 支持Servlet之间的通信:ServletContext对象可以用来支持Servlet之间的数据共享,比如将数据存储在ServletContext对象中,这样其它的Servlet可以直接访问这些数据。
ServletContext提供了一些基本的方法,比如:
- getRealPath(String path):获取指定虚拟路径所对应的真实路径。
- getResource(String path):获取指定相对于Web应用程序根目录的路径的URL对象。
- setAttribute(String name, Object object):将一个对象绑定到ServletContext对象上。
- getAttribute(String name):从ServletContext对象中获取指定名称的对象。
- getInitParameter(String name):获取指定初始化参数的值。
当应用程序启动时,Web服务器会自动创建一个ServletContext对象,随着应用程序的终止而销毁。可以通过在Servlet中覆盖init()方法或者实现ServletContextListener接口来获取ServletContext实例。例如:
public class MyServlet extends HttpServlet {
private ServletContext context;
public void init(ServletConfig config) throws ServletException {
super.init(config);
context = getServletContext();
}
}
public class MyServletContextListener implements ServletContextListener{
public void contextInitialized(ServletContextEvent event) {
// 应用程序启动时执行的代码
}
public void contextDestroyed(ServletContextEvent event){
// 应用程序终止时执行的代码
}
}
二、获取ServletContext对象
在Servlet中获取ServletContext对象有多种方法,常用的方式包括: