java学习day32-Servlet上下文--ServletContext

Servlet上下文

Servlet上下文有叫做: ServletContext, 一个WEB应用只有一个ServletContext

上下文特点

  1. 当WEB服务器启动时,会为每一个WEB应用程序创建一块共享的存储区域。
  2. ServletContext也叫做“公共区域”,也就是同一个WEB应用程序中,所有的Servlet和JSP都可以共享同一个区域。
  3. ServletContext在WEB服务器启动时创建,服务器关闭时销毁。

获取上下文对象

再servlet类中:

ServletContext context = this.getServletContext(); // 获取上下文对象
// context.setAttribute(<String>, <Object>); // 往上下文中存数据
// context.removeAttribute(<String>); // 删除上下文中的某一个数据

存入的数据整个WEB应用的任何servlet都能获取到, 关闭web服务器的时候失效

代码示例

AServlet类 (Servlet类)

@WebServlet(name = "AServlet", value = "/a")//使用注解
public class AServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
        	throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
        	throws ServletException, IOException {
        // 获取上下文对象
        ServletContext context = this.getServletContext();
        String name = "jack";
        // 存入一个数据
        context.setAttribute("name", name);
    }
}

BServlet类 (Servlet类)

@WebServlet(name = "BServlet", value = "/b")
public class BServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
        	throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
        	throws ServletException, IOException {
        // 获取上下文对象
        ServletContext context = this.getServletContext();
        // 获取上下文中的数据
        String name = (String) context.getAttribute("name");
        response.getWriter().write(name);
    }
}

浏览器先访问 /a, 然后访问 /b 浏览器显示:

jack

上下文和Session的区别

  • 作用范围不同

    HttpSession是针对每一个客户端浏览器单独有一个。

    ServletContext是针对每一个WEB应用程序有一个

  • 存活时间不同:

    HttpSession第一次访问服务器时创建,session超时后销毁(默认无响应30分钟后)

    ServletContext服务器启动时创建,服务器停止时销毁。

原文地址:https://www.cnblogs.com/liqbk/p/13126250.html