1. ServletContext概述
1.1 基本介紹
ServletContext對象,它是應用上下文對象。每一個應用有且隻有一個ServletContext對象。它可以實作讓應用中所有Servlet間的資料共享。
1.2 生命周期
出生——活着——死亡
出生: 應用一加載,該對象就被建立出來了。一個應用隻有一個執行個體對象。(Servlet和ServletContext都是單例的)
活着:隻要應用一直提供服務,該對象就一直存在。
死亡:應用被解除安裝(或者伺服器挂了),該對象消亡。
1.3 域對象概念
域對象的概念,它指的是對象有作用域,即有作用範圍。
域對象的作用,域對象可以實作資料共享。不同作用範圍的域對象,共享資料的能力不一樣。
在Servlet規範中,一共有4個域對象。今天我們講解的ServletContext就是其中一個。它也是我們接觸的第一個域對象。它是web應用中最大的作用域,叫application域。每個應用隻有一個application域。它可以實作整個應用間的資料共享功能。
2 ServletContext的使用
2 1 ServletContext介紹
ServletContext 是應用上下文對象。每一個應用中隻有一個 ServletContext 對象。
作用:可以獲得應用的全局初始化參數和達到 Servlet 之間的資料共享。
生命周期:應用一加載則建立,應用被停止則銷毀。

2.2 域對象
域對象指的是對象有作用域。也就是有作用範圍。域對象可以實作資料的共享。不同作用範圍的域對象,共享資料的能力也不一樣。
在 Servlet 規範中,一共有 4 個域對象。ServletContext 就是其中的一個。它也是 web 應用中最大的作用域,也叫 application 域。它可以實作整個應用之間的資料共享!
2.3 ServletContext配置
ServletContext既然被稱之為應用上下文對象,是以它的配置是針對整個應用的配置,而非某個特定Servlet的配置。它的配置被稱為應用的初始化參數配置。
配置的方式,需要在
<web-app>
标簽中使用
<context-param>
來配置初始化參數。具體代碼如下:
<!--配置應用初始化參數-->
<context-param>
<!--用于擷取初始化參數的key-->
<param-name>servletContextInfo</param-name>
<!--初始化參數的值-->
<param-value>This is application scope</param-value>
</context-param>
<!--每個應用初始化參數都需要用到context-param标簽-->
<context-param>
<param-name>globalEncoding</param-name>
<param-value>UTF-8</param-value>
</context-param>
2.4 ServletContext常用方法
public class ServletContextDemo extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//擷取ServletContext對象
ServletContext context = getServletContext();
//擷取全局配置的globalEncoding
String value = context.getInitParameter("globalEncoding");
System.out.println(value);
//擷取應用的通路虛拟目錄
String contextPath = context.getContextPath();
System.out.println(contextPath);
//根據虛拟目錄擷取應用部署的磁盤絕對路徑
//擷取b.txt檔案的絕對路徑
String b = context.getRealPath("/b.txt");
System.out.println(b);
//擷取c.txt檔案的絕對路徑
String c = context.getRealPath("/WEB-INF/c.txt");
System.out.println(c);
//擷取a.txt檔案的絕對路徑
String a = context.getRealPath("/WEB-INF/classes/a.txt");
System.out.println(a);
//向域對象中存儲資料
context.setAttribute("username","zhangsan");
//移除域對象中username的資料
//context.removeAttribute("username");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}