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

  • 相关阅读:
    ASP.NET CORE 2.0 模板 (Admin LTE)
    MVC5+EF6 完整教程17--升级到EFCore2.0
    MVC 5 + EF6 完整教程16 -- 控制器详解
    MVC 5 + EF6 完整教程15 -- 使用DI进行解耦
    MVC 5 + EF6 入门完整教程14 -- 动态生成面包屑导航
    MVC5+EF6 入门完整教程13 -- 动态生成多级菜单
    MVC5+EF6 入门完整教程12--灵活控制Action权限
    MVC5+EF6 入门完整教程11--细说MVC中仓储模式的应用
    LeetCode 504. Base 7
    LeetCode 594. Longest Harmonious Subsequence
  • 原文地址:https://www.cnblogs.com/yu011/p/13793587.html
Copyright © 2020-2023  润新知