1、ServletContext 是一个接口,它表示 Servlet 上下文对象
2、一个 web 工程,只有一个 ServletContext 对象实例。
3、ServletContext 对象是一个域对象。
4、ServletContext 是在 web 工程部署启动的时候创建。在 web 工程停止的时候销毁。
什么是域对象?
域对象,是可以像 Map 一样存取数据的对象,叫域对象。这里的域指的是存取数据的操作范围,整个 web 工程。
存数据 | 取数据 | 删除 数据 | |
Map | put() | get() | remove() |
域对象 | setAttribute() | getAttribute() | removeAttribute(); |
ServletContext 类的四个作用
1、获取 web.xml 中配置的上下文参数 context-param
2、获取当前的工程路径,格式: /工程路径
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = this.getServletContext();
String contextPath = servletContext.getContextPath();
System.out.println("contextPath 当前工程路径= " + contextPath);
}
3、获取工程部署后在服务器硬盘上的绝对路径
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = this.getServletContext();
/*
3、获取工程部署后在服务器硬盘上的绝对路径
/ 斜杠被服务器解析地址为:http://ip:port/工程名/ 映射到IDEA代码的web目录
*/
System.out.println(" 工 程 部 署 的 路 径 是 :" + servletContext.getRealPath("/"));
System.out.println("工程下 css 目录的绝对路径是:" + servletContext.getRealPath("/css"));
System.out.println("工程下 imgs 目录 1.jpg 的绝对路径是:" + servletContext.getRealPath("/imgs/1.jpg"));
}
4、像 Map 一样存取数据
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext context = getServletContext(); System.out.println("Context 中获取username的值 "+ context.getAttribute("username")); context.setAttribute("username" , "liufen"); System.out.println("Context 中获取username的值 "+ context.getAttribute("username")); }
ServletContext对象中保存了username属性liufen后在其他的Servlet类中再去ServletContext对象中的属性username也能获取值liufen
ServletContext类它是一个全局作用域,只要它里面保存了数据,可以在任何地方去获取它保存的数据,除非你主动除掉保存的数据否则这些数据一直存在。