• ServletContext


    Request 解决了一次请求内的数据共享问题,session 解决了用户不同请求的数据共享问题,而不同的用户的数据共享则该使用使用 ServletContext 对象。

    原理

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

    特点

    1. 服务器进行创建
    2. 用户共享
    3. 一个项目只有一个生命周期:
    4. 服务器启动到服务器关闭
    5. 作用域:项目内

    使用

    通过 this.getServletContext(); 得到ServletContext对象。你可以把它想象成一张表,这个和Session非常相似:每一行就是一个属性,如下:

    • 添加属性:setAttribute(String name, Object obj);
    • 得到值:getAttribute(String name),这个方法返回Object
    • 删除属性:removeAttribute(String name)

    实现Servlet的请求转发

    1. 通过request对象: java //url 是目的地,会将当前 servlet 的request 和 response 传过去 request.getRequestDispatcher("/url").forward(request, response);
    2. ServletContext 实现: java this.getServletContext().getRequestDispatcher("/url").forward(request, response);

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

    文件在 WebRoot 文件夹下,即我们的 Web 应用的根目录下。这时候我们可以使用 ServletContext 来读取该资源文件。假设我们Web根目录下有一个配置数据库信息的 dbinfo.properties 文件,里面配置了 name 和 password 属性,这时候可以通过 ServletContext 去读取这个文件:

    1 // 这种方法的默认读取路径就是Web应用的根目录
    2 InputStream stream = this.getServletContext().getResourceAsStream("dbinfo.properties");
    3 // 创建属性对象
    4 Properties properties = new Properties();
    5 properties.load(stream);
    6 String name = properties.getProperty("name");
    7 String password = properties.getProperty("password");
    8 out.println("name="+name+";password="+password);
    因为存在ServletContext中的数据会长时间保存在服务器,会占用内存,因此建议不要向 ServletContext 中添加过大的数据!
  • 相关阅读:
    用word2007发布带图片博客windows服务程序
    ActiveRecord与GridView,ObjectDataSource配合使用时的问题
    Spring.NET & NHibernate文章收集
    myOleDbConnection.GetOleDbSchemaTable异常
    想看本书《CSS禅意花园》
    一个考生表,现在要随机生成考号,遇到sql疑问,请教各位大虾
    选中与复制表格
    ActiveRecord多表查询
    DotNetNuke与MemberShip的结合(五年版)
    IIS+php5.0+mysql架设
  • 原文地址:https://www.cnblogs.com/carlosouyang/p/11117120.html
Copyright © 2020-2023  润新知