我們知道一個ServletContext對象對應(yīng)一個web應(yīng)用,我們也可以稱ServletContext是web應(yīng)用的上下文對象。它能夠?qū)崿F(xiàn)web應(yīng)用中Servlet之間的數(shù)據(jù)通信,以及獲取全局初始化參數(shù)等功能。下面我們就來一一介紹這兩種功能。
1.ServletContext域功能
ServletContext是javaweb的四大域?qū)ο笾弧J裁词怯驅(qū)ο?主要來說,域?qū)ο笫怯脕碓诙鄠€Servlet之間傳遞數(shù)據(jù)。我們可以理解域是一個容器,可以將數(shù)據(jù)存放在這個域中,然后在域范圍內(nèi)可以將數(shù)據(jù)從這個域中取出來。也可以理解域就是一個范圍,ServletContext是四大域?qū)ο笾?,域范圍最大的?br />
所有域?qū)ο蠖加写嫒?shù)據(jù)的能力,是因?yàn)樵谟蛑写嬖谝粋€map,數(shù)據(jù)是以key-value的形式存放在域中。以下是ServletContext存取域中數(shù)據(jù)的相關(guān)方法,如表1-1所示:
方法名 |
方法描述 |
void setAttribute(String name ,Object value) |
向域中存放數(shù)據(jù),也稱為域?qū)傩?,例?setAttribute(“pw”,”123”),表示向域中存放了一個域?qū)傩?,屬性名?rdquo;pw”,屬性值為”123”,如果再次調(diào)用該方法,并向域中存放了同名的域?qū)傩?,最后存的會覆蓋以前存的。 |
Object getAttribute(String name) |
根據(jù)屬性名稱獲取域中的屬性值,使用該方法之前,一定要向域中存放數(shù)據(jù),這樣才能取出來。 |
void removeAttribut(String name) |
從域中移出指定屬性名的域?qū)傩?,包括屬性名和屬性值,如果參?shù)name指定的域?qū)傩圆淮嬖?,則本方法什么都不做。 |
Enumeration getAttributeNames() |
獲得域中所有的域?qū)傩缘拿Q,返回值類型是Enumeration |
下面通過一個案例,來學(xué)習(xí)這些方法的使用,詳情請參考
ServletContext功能案例詳解,點(diǎn)擊此處
下載案例源代碼,具體如下所示:
(1)建立一個web應(yīng)用,Example14,在該應(yīng)用下新建一個Servlet類,TestServlet,主要代碼如例1-1所示:
例1-1 TestServlet.java
public class TestServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/*
* 向ServletContext域中存放域?qū)傩?br />
* */
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域中獲取域?qū)傩?br />
* */
ServletContext servletContext=getServletContext();
String value=(String) servletContext.getAttribute("name");
System.out.println(value);
}
}
(3)TestServlet在web.xml文件中配置的訪問路徑是:“/TestServlet”;TwoServlet在web.xml文件中配置的訪問路徑是:“/TwoServlet”。
(4)將Example14應(yīng)用發(fā)布到Tomcat服務(wù)器,啟動服務(wù)器,在瀏覽器地址欄上輸入:http://localhost:8080/Example14/TestServlet,瀏覽器顯示結(jié)果如圖1-1所示:
圖1-1 瀏覽器顯示結(jié)果
(5)接著在瀏覽器端地址欄上輸入http://localhost:8080/Example14/TwoServlet,控制臺顯示結(jié)果如圖1-2所示:
圖1-2 控制臺運(yùn)行結(jié)果
由圖1-1、1-2所示,我們先訪問TestServlet,將name域?qū)傩源娣旁赟ervletContext域中,然后再訪問TwoServlet,這個時候就可以獲取域?qū)傩詎ame的值。
2.ServletContext獲取初始化參數(shù)
在web.xml文件中,不僅可以配置Servlet的初始化信息,還可以配置整個web應(yīng)用的初始化信息。web應(yīng)用初始化參數(shù)的配置方式具體如下所示:
<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>
在上面的實(shí)例中,<context-param>元素位于根元素<web-app>元素中,它的子元素<param-name>與<param-value>分別用來指定參數(shù)的名字與參數(shù)值。要獲取這些參數(shù)信息,可以使用ServletContext接口的getInitParameterNames()和getInitParameter(String name)。它們分別是用來獲取參數(shù)名和參數(shù)值。
下面通過一個案例來學(xué)習(xí)如何使用ServletContext類的這些方法獲取初始化參數(shù),具體如下:
(1)在Example14應(yīng)用中,新建一個Servlet類,ParamServlet,主要代碼如例1-4所示:
例1-4 ParamServlet.java
public class ParamServlet extends HttpServlet {
/*
* 通過ServletContext獲取全局初始化參數(shù)
* */
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文件的配置內(nèi)容,如例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服務(wù)器,在瀏覽器端地址欄輸入:http://localhost:8080/Example14/ParamServlet,控制臺打印結(jié)果如圖1-3所示:
圖1-3 控制臺打印結(jié)果
由圖1-3可知,ParamServlet將在web.xml文件配置的全局初始化信息獲取到了,由此可見,ServletContext對象可以獲取web應(yīng)用的初始化參數(shù)。
本文版權(quán)歸傳智播客Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!
作者:傳智播客Java培訓(xùn)學(xué)院
首發(fā):http://m.fskzgqt.cn/javaee