1. 程式人生 > >Web學習日記_14:ServletContext

Web學習日記_14:ServletContext

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”);