JavaWeb四大域对象:
PageContext
ServletRequest
HttpSession
ServletContext(这里主要讲解)
作用:解决了不同用户的数据共享问题(一个项目只有一个ServletContext)
用途:网站统计器
创建者:服务器
生命周期:服务器启动到服务器关闭
作用域:项目内
1)获取ServletContext对象的三种方式:
第一种:ServletContext sc=this.getServletContext();
第二种:ServletContext sc2=this.getServletContext();
第三种:ServletContext sc3=req.getSession().getServletContext();
2)利用ServletContext完成数据共享:
ServletContext对象存储数据(map:key-value):
void setAttribute(String name,Object value);
void getAttribute(String name);
void removeAttribute(String name);
Enumeration getAttributeNames(); //获取所有域属性的名称;
3)获取web.xml的全局配置数据(如果想获取自己servlet配置信息用ServletConfig对象):
<!-- 配置全局数据 -->
<context-param>
<param-name>name</param-name>
<param-value>zhangsan</param-value>
</context-param>
测试:
ServletContext app=this.getServletContext();
String value=app.getInitParameter("name");
System.out.println(value);
全局配置作用大:将静态数据与代码进行解耦。
注意:一组 <context-param>只能声明一组键值对,多组可以声明多个 <context-param>进行存储。
4)ServletContext获得路径方法:
getContextPath():相对路径
getRealPath():绝对路径
<%="当前项目的虚拟路径:" +application.getContextPath()+"<br/>" %>
<%="虚拟路径对应的绝对路径:" +application.getRealPath("/MyJspProject")+"<br/>" %>
获取项目根目录(webContent)下资源的绝对路径(动态获取):
获取此项目下,webContent/doc/1.txt文件
String path=sc.getRealPath("/doc/1.txt");
获取根目录下的资源流对象:
InputStream is=sc.getRescourceAsStream(String path);
注:此方式只能获得资源流对象,.class文件的流对象需要使用类加载器获取。