ServletContext

Request 解決了一次請求內的數據共享問題,session 解決了用戶不一樣請求的數據共享問題,而不一樣的用戶的數據共享則該使用使用 ServletContext 對象。java

原理

ServletContext 對象由服務器進行建立,一個項目只有一個對象。無論在項目的任意位置進行獲取獲得的都是同一個對象,那麼不一樣用戶發起的請求獲取到的也就是同一個對象了,該對象由用戶共同擁有。數據庫

特色

  1. 服務器進行建立
  2. 用戶共享
  3. 一個項目只有一個生命週期:
  4. 服務器啓動到服務器關閉
  5. 做用域:項目內

使用

經過 this.getServletContext(); 獲得ServletContext對象。你能夠把它想象成一張表,這個和Session很是類似:每一行就是一個屬性,以下:服務器

  • 添加屬性:setAttribute(String name, Object obj);
  • 獲得值:getAttribute(String name),這個方法返回Object
  • 刪除屬性:removeAttribute(String name)

實現Servlet的請求轉發

  1. 經過request對象: java //url 是目的地,會將當前 servlet 的request 和 response 傳過去 request.getRequestDispatcher("/url").forward(request, response);
  2. ServletContext 實現: java this.getServletContext().getRequestDispatcher("/url").forward(request, response);

利用 ServletContext 對象讀取資源文件(好比properties文件)

文件在 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 中添加過大的數據!
相關文章
相關標籤/搜索