ServletContext对象学习:
问题:request 对象解决了一次请求内数据的共享问题,session解决了用户的不同请求的数据共享问题,那么,不同用户的数据共享问题该如何解决呢?
解决:使用ServletContext对象
作用:解决了不同用户的数据共享问题
原理:ServletContext对象是由服务器创建,一个项目只有一个对象,不管在项目的任意位置进行获取,得到的都是同一对象。那么不同用户发起的请求获取到的也就是同一个对象,该对象由用户共同拥有。
特点:
1.由服务器创建
2.用户共享
3.一个项目只有一个
生命周期:
服务器启动到服务器关闭
作用域:项目内
使用:
1.获取ServletContext对象(三种方式)
ServletContext sc=this.getServletContext();
ServletContext sc2=this.getServletConfig().getServletContext();
ServletContext sc3=this.req.getSession().getServletContext();
使用Servlet对象完成数据共享
2.数据存储
sc,setAttribute(String name,String value);
3.数据获取
sc.getArrtribute("str");//返回的是object类型的数据
注意:不同的用户可以给ServletContext对象进行数据的存取,获取数据不存在时返回null。
4.获取项目中的web.xml文件的全局配置数据
sc.getIntiParameter(String name);
根据键名返回web.xml中配置的全局数据的值,返回String类型,如果不存在,则返回null
sc.getIntiParameterNames();
返回键名的枚举
配置方式:注意,一组标签只能存储一组键值对,多组数据可以使用多个进行存储
<context-param>
<param-name>name</param-name>
<param-value>zhangsan</param-value>
</context-param>
作用:将静态数据域代码进行解耦
获取webcontent下的资源的绝对路径
String path=sc.getRealPath(String path);
//获取的路径为项目根目录,path参数为项目根目录下的路径
获取webcontent下的资源流对象
InputStream is=sc.getResourceAsstream(String path);
注意:此种方式只能获取到项目根目录下的资源流对象,class文件的资源流对象需要利用类加载器来获取。
我是一条没有感情的分隔线
ServletConfig对象:
问题:
使用ServletContext对象可以获取web.xml的全局配置文件,在web.xml中,每个Servlet也可以进行单独的配置,那么该如何获取这些配置信息呢?
解决:使用ServletConfig对象
作用:ServletConfig 对象是Servlet的专属对象,每个Servlet都单独拥有一个ServletConfig对象,用来获取web.xml中的配置信息
使用:
获取ServletConfig对象
获取web.xml中Servlet的配置信息