一、ServletContext介绍
ServletContext官方叫servlet上下文。服务器会为每一个工程创建一个对象,这个对象就是ServletContext对象。这个对象全局唯一,而且工程内部的所有servlet都共享这个对象。所以叫全局应用程序共享对象。
二、ServletContext的获取和使用
(一)说明
/**
* 获取ServletContext对象
* 1. 通过request获取
* 2. 通过session对象获取
* 3. 通过ServletConfig对象获取
* 4. 直接获取
*
* 常用方法
* 1. 获取当前服务器的版本信息
* 2. 获取项目的真实路径
* 3. 设置、获取、移除域对象
*/
(二)演示代码
@WebServlet("/cs1")
public class Cs1 extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//通过request获取
ServletContext servletContext1 = req.getServletContext();
//通过session对象获取
ServletContext servletContext2 = req.getSession().getServletContext();
//通过ServletConfig对象获取
ServletContext servletContext3 = getServletConfig().getServletContext();
//直接获取
ServletContext servletContext4 = getServletContext();
//常用方法
//1. 获取当前服务器的版本信息
String serverInfo = req.getServletContext().getServerInfo();
System.out.println("获取当前服务器的版本信息:" + serverInfo);
//2. 获取项目的真实路径
String realPath = req.getServletContext().getRealPath("/");
System.out.println("获取项目的真实路径: " + realPath);
//获取ServletContext对象
ServletContext servletContext = req.getServletContext();
//设置域对象
servletContext.setAttribute("name","zhangsan");
//获取域对象
String name = (String) servletContext.getAttribute("name");
//移除域对象
servletContext.removeAttribute("name");
}
}
三、Servlet三大域对象的对比
Servlet的三大域对象
- request域对象
在一次请求中有效,请求转发有效,重定向失效 - session域对象
在一次会话中有效,请求转发和重定向都有效,session销毁后失效 - servlet域对象
在整个应用程序中有效,服务器关闭后失效