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,获取数据。
在这里插入图片描述

原文地址:https://www.cnblogs.com/yu011/p/13793587.html