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