一、servletContext圖解
正如上圖所示:因爲ServletContext數據長期保存在服務器,會佔用內存,因此建議不要像服務器中添加過大的數據。
二、ServletContext與session、cookie有什麼異同
1,servletContext和session一樣保存在服務端。
2,servletContext在服務器單獨爲它開闢內存空間,可以被所有用戶共享。
3,ServletContext當web應用啓動的時候自動被創建。
4,ServletContext當tomcat關閉,或者web應用reload的時候,servletContext自動銷燬。
三、ServletContext使用場景
1,網頁計數器
2,在線用戶顯示
3,簡單的聊天系統等。
總之:如果是不同頁面共享數據,而這些數據量不大,同時又不想操作數據庫我們就可以考慮使用ServletContext。
四、ServletContext如何使用?
1,得到ServletContext
this.getServletContext();或 this.getServletConfig().getServletContext();
2,添加屬性
servletContext.setAttribute(String,Object);
3,獲取屬性
servletContext.getAttribute("屬性名");
4,刪除屬性
servletContext.removeAttribute("屬性名");
五、ServletContext特殊使用
1,獲取web應用初始化參數
<context-param>
<param-name>username</param-name>
<param-value>scott</param-value>
</context-param>
2,使用ServletContext實現跳轉
this.getServletContext().getRequestDispatcher("/login").forward(req, resp);
3,讀取文件
(1)【web目錄或WEB-INF下的文件】
InputStream inputStream=this.getServletContext().getResourceAsStream("dbinfo.Properties");
//創建Properties
Properties pp=new Properties();
pp.load(inputStream);
String username=pp.getProperty("username");
String password=pp.getProperty("password");
out.println("username="+username+" password="+password);
(2)如果文件放在src目錄下則用類加載器進行加載
InputStream is =Servlet5.class.getClass().getResourceAsStream("dbinfo.Properties");
(3)獲取文件全路徑,加載文件
String path = getServletContext().getRealPath("/imag/bg.jpg");
System.out.println("path = "+path);
InputStream inputStream = this.getServletContext().getResourceAsStream(path);
六、ServletConfig
(1)servletConfig主要用於讀取servlet的配置信息(即:讀取web.xlm)
<servlet>
<servlet-name>ConfigTest</servlet-name>
<servlet-class>com.hsp.model.ConfigTest</servlet-class>
<!-- 這裏可以給servlet配置信息,這裏配置的信息只能被該servlet讀取 -->
<init-param>
<param-name>encoding</param-name>
<param-value>gbk</param-value>
</init-param>
<!-- 1表示該servlet被初始化的順序 -->
<load-on-startup>1</load-on-startup>
</servlet>
針對上面配置,讀取配置信息。
String encoding=this.getServletConfig().getInitParameter("encoding");
(2)針對某個servlet配置,讀取該servlet所有配置參數信息
Enumeration<String> names=this.getServletConfig().getInitParameterNames();
while(names.hasMoreElements()){
String name=names.nextElement();
System.out.println(name);
System.out.println(this.getServletConfig().getInitParameter(name));
}
}