问题:
-
不同用户使用相同的数据
-
解决:
-
serveltContext对象
-
特点:
-
服务器创建/用户共享
-
作用域:
-
整个项目内
-
生命周期:
-
服务器启动到关闭
-
使用:
-
1.获取servletContext对象 //第一种方式 ServletContext sc=this.getServletContext(); //第二种方式 ServletContext sc2=this.getServletConfig().getServletContext(); //第三种方式 ServletContext sc3=req.getSession().getServletContext();
-
2.使用servletContext对象完成数据共享
-
sc.getAttribute("str") 返回的是Object类型
-
注意:
-
· 不同的用户可以给servletContext对象进行数据的存取
-
获取的数据不存在返回null
-
获取项目中web.xml文件中的全局数据
-
sc.getInitParameter(String name);根据键的名字返回web.xml中配置的全局数据的值,返回的类型为String
-
如果数据不逊在返回null
-
sc.getInitParameterNames();返回键名的枚举
-
配置方式:(一组标签只能存储一组键值对数据)
-
<context-param> <param-name>name</param-name> <param-value>zhangsan</param-value> </context-param> 作用: 将静态数据和代码进行解耦 获取项目webroot下的资源的绝对路径 String path=sc.getRealPath(String path); 获取路径为项目根目录,参数为项目根目录中的路径 获取webroot下的资源流对象 InputStream is= sc.getResourceAsStream(String path); 注意: 此种方式只能获取项目根目录下的资源流对象,class文件的流对象需要使用类加载器获取
-
`public class servletContext extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取servletContext对象
//第一种方式
ServletContext sc=this.getServletContext();
//第二种方式
ServletContext sc2=this.getServletConfig().getServletContext();
//第三种方式
ServletContext sc3= req.getSession().getServletContext();
System.out.println(scsc2);
System.out.println(sc2sc3);
//使用servletContext对象实现数据共享
sc.setAttribute(“str”, “servletContext对象学习”);
//获取web项目的全局数据
String str=sc.getInitParameter(“name”);System.out.println(str); //获取项目根目录下的资源的绝对路径
// String path=“C:\Users\Qingquan Wu\Desktop\My Document\06-servletContext\WebContent\doc\1.txt”;
String path=sc.getRealPath("/doc/1.txt");
System.out.println(path);
//获取webroot下的资源流对象
InputStream is= sc.getResourceAsStream("/doc/1.txt");
}
}
`