Request 解決了一次請求內的數據共享問題,session 解決了用戶不一樣請求的數據共享問題,而不一樣的用戶的數據共享則該使用使用 ServletContext 對象。java
ServletContext 對象由服務器進行建立,一個項目只有一個對象。無論在項目的任意位置進行獲取獲得的都是同一個對象,那麼不一樣用戶發起的請求獲取到的也就是同一個對象了,該對象由用戶共同擁有。數據庫
經過 this.getServletContext();
獲得ServletContext對象。你能夠把它想象成一張表,這個和Session很是類似:每一行就是一個屬性,以下:服務器
setAttribute(String name, Object obj);
getAttribute(String name),這個方法返回Object
removeAttribute(String name)
java //url 是目的地,會將當前 servlet 的request 和 response 傳過去 request.getRequestDispatcher("/url").forward(request, response);
java this.getServletContext().getRequestDispatcher("/url").forward(request, response);
文件在 WebRoot 文件夾下,即咱們的 Web 應用的根目錄下。這時候咱們能夠使用 ServletContext 來讀取該資源文件。假設咱們Web根目錄下有一個配置數據庫信息的 dbinfo.properties 文件,裏面配置了 name 和 password 屬性,這時候能夠經過 ServletContext 去讀取這個文件:session
1 // 這種方法的默認讀取路徑就是Web應用的根目錄 2 InputStream stream = this.getServletContext().getResourceAsStream("dbinfo.properties"); 3 // 建立屬性對象 4 Properties properties = new Properties(); 5 properties.load(stream); 6 String name = properties.getProperty("name"); 7 String password = properties.getProperty("password"); 8 out.println("name="+name+";password="+password);
由於存在ServletContext中的數據會長時間保存在服務器,會佔用內存,所以建議不要向 ServletContext 中添加過大的數據!