我們知道一個ServletContext對象對應一個web應用,我們也可以稱ServletContext是web應用的上下文對象。它能夠實現web應用中Servlet之間的數據通信,以及獲取全局初始化參數等功能。下面我們就來一一介紹這兩種功能。
1.ServletContext域功能
ServletContext是javaweb的四大域對象之一。什么是域對象?主要來說,域對象是用來在多個Servlet之間傳遞數據。我們可以理解域是一個容器,可以將數據存放在這個域中,然后在域范圍內可以將數據從這個域中取出來。也可以理解域就是一個范圍,ServletContext是四大域對象中,域范圍最大的。
所有域對象都有存取數據的能力,是因為在域中存在一個map,數據是以key-value的形式存放在域中。以下是ServletContext存取域中數據的相關方法,如表1-1所示:
方法名 |
方法描述 |
void setAttribute(String name ,Object value) |
向域中存放數據,也稱為域屬性,例如:setAttribute(“pw”,”123”),表示向域中存放了一個域屬性,屬性名為”pw”,屬性值為”123”,如果再次調用該方法,并向域中存放了同名的域屬性,最后存的會覆蓋以前存的。 |
Object getAttribute(String name) |
根據屬性名稱獲取域中的屬性值,使用該方法之前,一定要向域中存放數據,這樣才能取出來。 |
void removeAttribut(String name) |
從域中移出指定屬性名的域屬性,包括屬性名和屬性值,如果參數name指定的域屬性不存在,則本方法什么都不做。 |
Enumeration getAttributeNames() |
獲得域中所有的域屬性的名稱,返回值類型是Enumeration |
下面通過一個案例,來學習這些方法的使用,詳情請參考
ServletContext功能案例詳解,點擊此處

下載案例源代碼,具體如下所示:
(1)建立一個web應用,Example14,在該應用下新建一個Servlet類,TestServlet,主要代碼如例1-1所示:
例1-1 TestServlet.java
public class TestServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/*
* 向ServletContext域中存放域屬性
* */
ServletContext servletContext=getServletContext();
servletContext.setAttribute("name","zhangsan");
}
}
(2)再次新建一個Servlet類,TwoServlet ,主要代碼如例1-2所示:
例1-2 TwoServlet.java
public class TwoServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/*
* 從ServletContext域中獲取域屬性
* */
ServletContext servletContext=getServletContext();
String value=(String) servletContext.getAttribute("name");
System.out.println(value);
}
}
(3)TestServlet在web.xml文件中配置的訪問路徑是:“/TestServlet”;TwoServlet在web.xml文件中配置的訪問路徑是:“/TwoServlet”。
(4)將Example14應用發(fā)布到Tomcat服務器,啟動服務器,在瀏覽器地址欄上輸入:http://localhost:8080/Example14/TestServlet,瀏覽器顯示結果如圖1-1所示:

圖1-1 瀏覽器顯示結果
(5)接著在瀏覽器端地址欄上輸入http://localhost:8080/Example14/TwoServlet,控制臺顯示結果如圖1-2所示:

圖1-2 控制臺運行結果
由圖1-1、1-2所示,我們先訪問TestServlet,將name域屬性存放在ServletContext域中,然后再訪問TwoServlet,這個時候就可以獲取域屬性name的值。
2.ServletContext獲取初始化參數
在web.xml文件中,不僅可以配置Servlet的初始化信息,還可以配置整個web應用的初始化信息。web應用初始化參數的配置方式具體如下所示:
<context-param>
<param-name>hobby</param-name>
<param-value>play</param-value>
</context-param>
<context-param>
<param-name>gender</param-name>
<param-value>male</param-value>
</context-param>
在上面的實例中,<context-param>元素位于根元素<web-app>元素中,它的子元素<param-name>與<param-value>分別用來指定參數的名字與參數值。要獲取這些參數信息,可以使用ServletContext接口的getInitParameterNames()和getInitParameter(String name)。它們分別是用來獲取參數名和參數值。
下面通過一個案例來學習如何使用ServletContext類的這些方法獲取初始化參數,具體如下:
(1)在Example14應用中,新建一個Servlet類,ParamServlet,主要代碼如例1-4所示:
例1-4 ParamServlet.java
public class ParamServlet extends HttpServlet {
/*
* 通過ServletContext獲取全局初始化參數
* */
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletContext servletContext=getServletContext();
String hobby= servletContext.getInitParameter("hobby");
String gender=servletContext.getInitParameter("gender");
System.out.println("hobby:"+hobby);
System.out.println("gender:"+gender);
}
}
(2)web.xml文件的配置內容,如例1-5所示:
例1-5 web.xml
<context-param>
<param-name>hobby</param-name>
<param-value>play</param-value>
</context-param>
<context-param>
<param-name>gender</param-name>
<param-value>male</param-value>
</context-param>
<servlet>
<servlet-name>ParamServlet</servlet-name>
<servlet-class>cn.itcast.web.servlet.ParamServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ParamServlet</servlet-name>
<url-pattern>/ParamServlet</url-pattern>
</servlet-mapping>
(3)重新啟動Tomcat服務器,在瀏覽器端地址欄輸入:http://localhost:8080/Example14/ParamServlet,控制臺打印結果如圖1-3所示:
圖1-3 控制臺打印結果
由圖1-3可知,ParamServlet將在web.xml文件配置的全局初始化信息獲取到了,由此可見,ServletContext對象可以獲取web應用的初始化參數。
本文版權歸傳智播客Java培訓學院所有,歡迎轉載,轉載請注明作者出處。謝謝!
作者:傳智播客Java培訓學院
首發(fā):http://fskzgqt.cn/javaee