• ServletContext 对象


    通过前面知识点的学习,我们对于请求的处理已经可以说比较灵活了,但是还不够。我们再介绍重要的对象ServletContext 对象

    ServletContext 对象

    问题:

    Request 解决了一次请求内的数据共享问题,

    session 解决了用户不同请求的数据共享问题,那么不同的用户的数据共享该怎么办呢?

    解决:

    使用ServletContext 对象:解决了用户不同请求的数据共享问题

    作用:

    解决了不同用户的数据共享问题

    原理:

    ServletContext 对象由服务器进行创建,一个项目只有一个对象

    不管在项目的任意位置进行获取得到的都是同一个对象,那么不同用户发起的请求获取到的也就是同一个对象了,该对象由用户共同拥有。

    特点:

    1、服务器进行创建

    2、用户共享

    3、一个项目只有一个生命周期:

    4、服务器启动到服务器关闭

    作用域:

    项目内

    怎么使用ServletContext

    使用ServletContext:

    (1) 如何得到ServletContext对象

    this.getServletContext(); 

    (2) 你可以把它想象成一张表,这个和Session非常相似:每一行就是一个属性,如下:

    添加属性:setAttribute(String name, Object obj);

    得到值:getAttribute(String name),这个方法返回Object

    删除属性:removeAttribute(String name)

    3)实现Servlet的请求转发方法:

    一、之前我们学过的请求转发是通过request对象的:

    request.getRequestDispatcher("/url").forward(request, response);

    二、这里要说明的是,ServletContext也可以实现请求转发:

    this.getServletContext().getRequestDispatcher("/url").forward(request, response); 

    这两个转发效果是一样的。

    3)利用ServletContext对象读取资源文件(比如properties文件):

    文件在WebRoot文件夹下,即我们的Web应用的根目录下。这时候我们可以使用ServletContext来读取该资源文件。

    假设我们Web根目录下有一个配置数据库信息的dbinfo.properties文件,里面配置了name和password属性,这时候可以通过ServletContext去读取这个文件:

    // 这种方法的默认读取路径就是Web应用的根目录
    InputStream stream = this.getServletContext().getResourceAsStream("dbinfo.properties");
    // 创建属性对象
    Properties properties = new Properties();
    properties.load(stream);
    String name = properties.getProperty("name");
    String password = properties.getProperty("password");
    out.println("name="+name+";password="+password);

    注意:因为存在ServletContext中的数据会长时间保存在服务器,会占用内存,因此我们建议不要向ServletContext中添加过大的数据!

  • 相关阅读:
    数据转换类型和算数运算符
    语言基础+数据类型
    JS(一)Prototype的使用
    Jquery EasyUI简介和数据的增删改查
    http简介
    《JavaScript语言精粹》笔记
    wcf
    简单工厂模式与抽象工厂模式
    <转载>C#中的特性(Attributes)
    <转载>C#IEnumerable和IEnumerator 详解
  • 原文地址:https://www.cnblogs.com/qq308015824/p/11025704.html
Copyright © 2020-2023  润新知