遇见的问题:
request解决了一次请求内的数据的共享的问题,session解决了用户不同请求的数据共享的问题,那么不同的用户数据 之间的共享需要怎么办?
解决方法:
使用ServletContext对象
作用:
解决不同用户之间的数据共享
原理:
ServletContext对象由服务器创建,一个项目只有一个对象,不管在项目的任意位置进行获取得到的都是同一个对象, 那么不同用户发起的请求获取到的也就是同一个对象了,该对象由用户所共有。
特点:
由服务器创建,用户共享,一个项目只有一个
生命周期:
服务器开启到服务器关闭
作用域:
整个项目内
使用:
1.获取ServletContext对象(常用的第一种和第三种)
//获取ServletContext对象
//第一种方式
ServletContext sc = this.getServletContext();
//第二种方式
ServletContext sc2 = this.getServletConfig().getServletContext();
//第三种方式
ServletContext sc3 = request.getSession().getServletContext();
2.使用ServletContext实现数据共享
//使用servletcontext完成数据共享
//数据存储 sc.sc.setAttribute(String name,Object value)
sc.setAttribute("str", "servletContext对象学习");
//获取数据
String value = (String)sc.getAttribute("str");
注意:如果数据不存在的话,取到的是null,这样也就是一个很重要的判断标准
不同的用户可以对ServletContext进行存储
3.获取项目中webx.xml文件中的全局配置
1.web.xml中设置全局配置
2.在Servlet中获取全局配置
<!-- 全局配置 如果多个变量,需要多个context-param-->
<context-param>
<param-name>name</param-name>
<param-value>zhangsan</param-value>
</context-param>
//获取web.xml中的全局配置
String str = sc.getInitParameter("name");
注意:如果数据不存在返回null,在web.xml中配置是key-value形式,一个<context-param>标签,配置一个变量,多个,多个变量
作用:将静态数据和代码进行解耦(重要)
4.获取WebContent下的资源的绝对路径(获取部署在tomcat上的项目的路径)
//获取WebContent下的文件的绝对路径
String path = sc.getRealPath("/doc/1.txt");
//获取到的是WebContent下的doc文件夹中的1.txt
5.获取项目根目录下资源的流对象
//获取WebContent下项目资源的流对象
InputStream is = sc.getResourceAsStream("/doc/1.txt");
注意:此种方式只能获取项目根目录下的资源流对象,.class文件不能获取