Servlet p7 ServletContext对象
ServletContext对象
每一个 web 应用都有且仅有一个 ServletContext 对象,又称为 Application 对象,从名称中可知,该对象是与应用程序相关的。在WEB 容器启动时,会为每一个 WEB 应用创建一个对应的 ServletContex对象。
该对象有两大作用:
-
作为域对象来共享数据,此时数据在整个应用程序中共享;
-
该对象中保存了当前应用程序相关信息。例如可以通过getServerInfo()方法获取当前服务器信息,getRealPath(String path) 获取资源的真是路径等。
//常用方法 //获取服务器当前版本信息 String serverInfo = req.getServletContext().getServerInfo(); System.out.println("获取服务器当前版本信息 = " + serverInfo); //获取项目的真实路径 String realPath = req.getServletContpext().getRealPath("/"); System.out.println("获取项目的真实路径 = " + realPath);
ServletContext对象的获取
获取Servlet Context对象的途径有很多。比如:
-
通过request对象获取
ServletContext servletContext1 = req.getServletContext();
-
通过Session对象获取
ServletContext servletContext2 = req.getSession().getServletContext();
-
通过ServletConfig对象获取,在 Servlet 标准中提供了 ServletConfig 方法
ServletContext servletContext3 = getServletConfig().getServletContext();
-
直接获取
ServletContext servletContext4 = getServletContext();
ServletContext域对象
ServletContext也可当做域对像象来使用,通过向ServletContext中存取数据,可以使得整个应用程序共享某些数据。当然不建议存放过多数据,因为ServletContext中的数据一旦存储进去没有手动移除将会一直保存。
//获取ServletContext对象
ServletContext servletContext = request.getServletContext();
//设置域对象
servletContext.setAttribute("uname", "admin");
//获取指定名称的域对象
String uname = (String) servletContext.getAttribute("uname");
//移除域对象
servletContext.removeAttribute("uname");
Servlet的三大域对象
-
request域对象
三个中作用范围最小,在一次请求中有效。请求转发有效,重定向无效。
-
session域对象
在一次会话中有效,请求转发和重定向都有效,session销毁后失效。
-
servletContext域对象
三个中作用范围最大,在整个应用程序中有效。服务器关闭后失效。