ServletContext接口
概述
1、 Servletcontext 对象称为全局作用域对象。来自于 servlet 规范中一个接口(在 Tomcat 中存在 servlet-api.jar ),在 Tomcat 中负责提供这个接口实现类。
2、如果两个 servlet 来自于同一个网站。彼此之间通过网站的 ServletContext 实例对象实现数据共享。
3、 ServletContext 是一个接口,它表示 Servlet 上下文对象(可以和程序的容器(服务器)来通信)。
4、一个web工程,只有一个ServletContext
对象实例。
5、 ServletContext 是在 web 工程部署启动的时候创建,在 web 工程停止的时候销毁。
6、 ServletContext 对象是一个域对象。
参考链接
域对象
1、域对象:就是类似于 Map ,可以在里面存取数据,叫域对象。
2、域对象的范围:指的是存取数据的操作范围。
3、 ServletContext 范围:整个 Web 工程。
获取 ServletContext 对象
通过 ServletConfig 获取
ServletContext servletContext = getServletConfig().getServletContext();
通过 ServletRequest 及其子类获取
//强转成 ServletRequest 获取
ServletRequest req = (ServletRequest)request;
ServletContext servletContext = req.getServletContext();
//通过 HttpServletRequest 获取
ServletContext application = request.getServletContext();
通过 getServletContext() 方法获取
直接调用该方法,其实是 GenericServlet 类中的方法,其本质还是通过 ServletConfig 对象获取。
ServletContext servletContext = getServletContext();
域对象:存取数据
(1)setAttribute(String name,Object value); 存储数据
(2)getAttribute(String name); 获取数据
ServletContext application = request.getServletContext();
//根据数据类型进行强转
Object 数据 = (Object) application.getAttribute("key");
(3)removeAttribute(String name); 移除数据
ServletContent 对象范围:所有用户所有请求的数据(remove谨慎使用)
代码示例
xml:/one
public class OneServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1、通过请求对象向Tomcat索要当前网站全局作用域对象
ServletContext application = request.getServletContext();
//2、将数据添加到全局作用域对象,作为共享数据
application.setAttribute("key1", 100);
}
}
xml:/two
public class TwoServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1、通过请求对象向Tomcat索要当前网站全局作用域对象
ServletContext application = request.getServletContext();
//2、从全局作用域对象得到指定关键字对应的值
Integer num = (Integer) application.getAttribute("key1");
System.out.println(num);
//使用Integer而不用int是为了避免空指针异常
}
}
先访问/one,保存数据。
访问/two,获取数据。