目录
ServletContext概述
- ServletContext是一个全局的储存信息的空间,服务器开始就存在,服务器关闭才释放。
- 所有Servlet共享同一个ServletContext对象,因此Servlet之间可以通过ServletContext对象来实现通信。
- ServletContext对象是在servlet接口中init方法中有的,而后来的HttpServlet继承自servlet接口。
- ServletContext中的属性都是用键-值形式存储的。
- 所以获取ServletContext方法有:
this.getServletContext();
this.getServletConfig().getServletContext();
ServletContext方法
得到属性值 = Object javax.servlet.ServletContext.getAttribute(String arg0)
设置属性 = void javax.servlet.ServletContext.setAttribute(String arg0, Object arg1)
删除属性 = void javax.servlet.ServletContext.removeAttribute(String arg0)
获取输入流 = InputStream javax.servlet.ServletContext.getResourceAsStream(String arg0)
获取真实路径 = String javax.servlet.ServletContext.getRealPath(String arg0)
获取所有路径 = getServletContext().getResourcePaths("/WEB-INF")
实例:
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//获取Context输入流对象 参数是访问根目录也就是WebRoot中的文件
InputStream is1 = this.getServletContext().getResourceAsStream("/index.jsp");
System.out.println(is1);
//如果参数不为根目录下的文件,就是用类加载器获得输入流
InputStream is2 = ServletContext03.class.getClassLoader().getResourceAsStream("/Servlet");
System.out.println(is2);
//获取真实路径
String rp = this.getServletContext().getRealPath("/index.jsp");
System.out.println(rp);
//获取所有资源地址
Set<String> grp = this.getServletContext().getResourcePaths("/WEB-INF");
System.out.println(grp);
/*
* 1)向ServletContext中添加属性
* 2)获取ServletContext中的属性
*/
this.getServletContext().setAttribute("1", "aaa");
String param1 = (String) this.getServletContext().getAttribute("1");
System.out.println(param1);
//删除属性
this.getServletContext().removeAttribute("1");
System.out.println(param1);
}
}
ServletContext应用
访问量统计实例:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/*访问统计
* 1.获得ServletContext对象
* 2.判断是否有name = 访问量 的属性
* 3.有就调用setattribute方法设置属性,+1并 保存回去
* 4.没有就调用setattribute方法设置一个 访问量属性 值为1
*/
//1
ServletContext pv = this.getServletContext();
//2
Integer count= (Integer)pv.getAttribute("pv1");
if(count != null){
pv.setAttribute("pv1", count+1);
}
else{
pv.setAttribute("pv1", 1);
}
System.out.println(count);
}