Web學習日記_14:ServletContext
阿新 • • 發佈:2018-12-12
1,ServletContext概述
伺服器會為每個應用建立一個ServletContext物件:
- ServletContext物件的建立是在伺服器啟動時完成的;
- ServletContext物件的銷燬是在伺服器關閉時完成的。
ServletContext物件的作用是在整個Web應用的動態資源之間共享資料!例如在AServlet中向ServletContext物件中儲存一
個值,然後在BServlet中就可以獲取這個值,這就是共享資料了。
2,獲取ServletContext的的方法
- ServletConfig#getServletContext();
- GenericServlet#getServletContext();
- HttpSession#getServletContext()
- ServletContextEvent#getServletContext()
在Servlet中獲取ServletContext物件:
- 在void init(ServletConfig config)中:ServletContext context = config.getServletContext();, ServletConfig類的getServletContext()方法可以用來獲取ServletContext物件;
- 在GenericeServlet或HttpServlet中獲取ServletContext物件:GenericServlet類有getServletContext()方法,所以可以直接使用this.getServletContext()來獲取;
public class MyServlet implements Servlet { public void init(ServletConfig config) { ServletContext context = config.getServletContext(); } } public class MyServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) { ServletContext context = this.getServletContext(); } }
3,域物件的功能
註釋:
- 域物件就是用來在多個Servlet中傳遞資料
- 域物件必須有要存資料功能
- 域物件必須要有取資料功能
- 域物件內部其實有一個Map
ServletContext是JavaWeb四大域物件之一:
- PageContext;
- ServletRequest;
- HttpSession;
- ServletContext;
所有域物件都有存取資料的功能,因為域物件內部有一個Map,用來儲存資料,下面是ServletContext物件用
來操作資料的方法:
- void setAttribute(String name, Object value):用來儲存一個物件,也可以稱之為儲存一個域屬性,例如:servletContext.setAttribute(“xxx”, “XXX”),在ServletContext中儲存了一個域屬性,域屬性名稱為xxx,域屬性的值為XXX。請注意,如果多次呼叫該方法,並且使用相同的name,那麼會覆蓋上一次的值,這一特性與Map相同;
- Object getAttribute(String name):用來獲取ServletContext中的資料,當前在獲取之前需要先去儲存才行,例如:String value = (String)servletContext.getAttribute(“xxx”);,獲取名為xxx的域屬性;
- void removeAttribute(String name):用來移除ServletContext中的域屬性,如果引數name指定的域屬性不存在,那麼本方法什麼都不做;
- Enumeration getAttributeNames():獲取所有域屬性的名稱;
4,獲取應用初始化引數
- Servlet也可以獲取初始化引數,但它是區域性的引數;也就是說,一個Servlet只能獲取自己的初始化引數,不能獲取別人的,即初始化引數只為一個Servlet準備!
- 可以配置公共的初始化引數,為所有Servlet而用!這需要使用ServletContext才能使用!
- 還可以使用ServletContext來獲取在web.xml檔案中配置的應用初始化引數!注意,應用初始化引數與Servlet初始化引數不同:
5,獲取真實路徑
還可以使用ServletContext物件來獲取Web應用下的資源,例如在hello應用的根目錄下建立a.txt檔案,現在想
在Servlet中獲取這個資源,就可以使用ServletContext來獲取。
- 獲取a.txt的真實路徑:String realPath = servletContext.getRealPath(“/a.txt”),realPath的值為a.txt檔案的絕對路徑:F:\tomcat6\webapps\hello\a.txt;
- 獲取b.txt的真實路徑:String realPath = servletContext.getRealPath(“/WEB-INF/b.txt”);