Servlet p7 ServletContext对象

发布时间 2023-07-06 15:50:45作者: 凉白茶

ServletContext对象

每一个 web 应用都有且仅有一个 ServletContext 对象,又称为 Application 对象,从名称中可知,该对象是与应用程序相关的。在WEB 容器启动时,会为每一个 WEB 应用创建一个对应的 ServletContex对象。

该对象有两大作用:

  1. 作为域对象来共享数据,此时数据在整个应用程序中共享;

  2. 该对象中保存了当前应用程序相关信息。例如可以通过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对象的途径有很多。比如:

  1. 通过request对象获取
    ServletContext servletContext1 = req.getServletContext();

  2. 通过Session对象获取
    ServletContext servletContext2 = req.getSession().getServletContext();

  3. 通过ServletConfig对象获取,在 Servlet 标准中提供了 ServletConfig 方法
    ServletContext servletContext3 = getServletConfig().getServletContext();

  4. 直接获取
    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的三大域对象

  1. request域对象

    三个中作用范围最小,在一次请求中有效。请求转发有效,重定向无效。

  2. session域对象

    在一次会话中有效,请求转发和重定向都有效,session销毁后失效。

  3. servletContext域对象

    三个中作用范围最大,在整个应用程序中有效。服务器关闭后失效。