ServletContext 对象

Posted moyulove

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ServletContext 对象相关的知识,希望对你有一定的参考价值。

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

 

ServletContext 对象

 

问题:

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

 

解决:

使用ServletContext 对象

 

作用:

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

 

原理:

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

 

特点:

服务器进行创建

用户共享

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

服务器启动到服务器关闭

 

作用域:

项目内

 

 

怎么使用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中添加过大的数据!

以上是关于ServletContext 对象的主要内容,如果未能解决你的问题,请参考以下文章

ServletContextListener和ServletContext

Servlet基础之ServletContext应用

web.xml加载顺序

web项目中全局常量的添加

三:ServletContext对象

ServletContext对象