熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

介紹一下JSP中application的用法?

2022-06-13   來源: Java核心技術 

application對象

?什麼是application對象??

()?當Web服務器啟動時Web服務器會自動創建一個application對象application對象一旦創建它將一直存在直到Web服務器關閉

一個Web服務器通常有多個Web服務目錄?(網站)當Web服務器啟動時它自動為每個Web服務目錄都創建一個application對象這些application對象各自獨立而且和Web服務目錄一一對應

訪問同一個網站的客戶都共享一個application對象因此application對象可以實現多客戶間的數據共享

訪問不同網站的客戶對應的application對象不同

()?application對象的生命周期從Web服務器啟動直到Web服務器關閉

注意一個Web應用程序啟動後將會自動創建一個application對象而且在整個應用程序的運行過程中只有一個application對象也即所有訪問該網站的客戶都共享一個application對象

()?application對象的作用范圍application對象是一個應用程序級的對象它作用於當前Web應用程序也即作用於當前網站所有訪問當前網站的客戶都共享一個application對象

具體來說不管哪個客戶來訪問網站A也不管客戶訪問網站A下哪個頁面文件都可以對網站A的application對象進行操作因為所有訪問網站A的客戶都共用一個application對象

因此當在application對象中存儲數據後所有訪問網站A的客戶都能夠對其進行訪問實現了多客戶之間的數據共享

()?application對象的基類是javaxservletServletContext類

注意有些Web服務器不直接支持使用application對象必須用ServletContext類來聲明application對象再調用getServletContext()方法來獲取當前頁面的application對象

()?ServletContext類用於表示應用程序的上下文

一個ServletContext類的對象表示一個Web應用程序的上下文

具體來說在Web服務器中提供了一個Web應用程序的運行時環境專門負責Web應用程序的部署編譯運行以及生命周期的管理通過ServletContext類可以獲取Web應用程序的運行時環境信息

常識JSP引擎Servlet引擎JSP容器和Servlet容器都是指Web服務器Web服務器用於管理所有Web應用程序

()?application對象的常用方法如下所示

方法名 描述 String?getAttribute(String?name) 根據屬性名稱獲取屬性值 Enumeration?getAttributeNames() 獲取所有的屬性名稱 void?setAttribute(String?name?Object?object) 設置屬性指定屬性名稱和屬性值 void?removeAttribute(String?name) 根據屬性名稱刪除對應的屬性 ?ServletContext?getContext(String?uripath) 獲取指定URL的ServletContext對象 String?getContextPath() 獲取當前Web應用程序的根目錄 String?getInitParameter(String?name) 根據初始化參數名稱獲取初始化參數值 int?getMajorVersion() 獲取Servlet?API的主版本號 int?getMinorVersion() 獲取Servlet?API的次版本號 String?getMimeType(String?file) 獲取指定文件的MIME?類型 String?getServletInfo() 獲取當前Web服務器的版本信息 String?getServletContextName() 獲取當前Web應用程序的名稱 void?log(String?message) 將信息寫入日志文件中

?使用application對象存儲數據

()?設置application對象的屬性和獲取application對象的屬性

測試代碼

TestApplicationjsp

<%@?page?language=&#;java&#;?contentType=&#;text/html;?charset=GBK&#;%>

<%?requestsetCharacterEncoding(&#;GBK&#;);%>

<html>

<body>

<form?name=&#;form&#;?action=&#;?method=&#;post&#;>

用戶名

<input?type=&#;text&#;?name=&#;username&#;?value=&#;>

<br>

密?碼

<input?type=&#;password&#;?name=&#;pwd&#;?value=&#;>

<br>

<input?type=&#;submit&#;?name=&#;btSubmit&#;?value=&#;提交&#;>

</form>

<%

applicationsetAttribute(&#;username&#;?requestgetParameter(&#;username&#;));

applicationsetAttribute(&#;pwd&#;?requestgetParameter(&#;pwd&#;));

%>

</body>

</html>

測試代碼

TestCommonjsp

在TestCommonjsp?頁面中通過application對象獲取屬性注意TestApplicationjsp和TestCommonjsp這兩個頁面之間沒有任何關聯只要通過application對象設置了屬性那麼就可以在任何頁面通過application對象獲取屬性或者刪除屬性

<%@?page?language=&#;java&#;?contentType=&#;text/html;?charset=GBK&#;%>

<%?requestsetCharacterEncoding(&#;GBK&#;);?%>

<html>

<body>

用戶名<%=applicationgetAttribute(&#;username&#;)?%><br>

密?碼<%=applicationgetAttribute(&#;pwd&#;)?%><br>

</body>

</html>

()?刪除application對象的屬性

測試代碼

TestCommonjsp

在TestCommonjsp?頁面中刪除application對象的屬性

<%@?page?language=&#;java&#;?contentType=&#;text/html;?charset=GBK&#;%>

<%?requestsetCharacterEncoding(&#;GBK&#;);?%>

<html>

<body>

<%&#;刪除屬性&#;%>

<%

applicationremoveAttribute(&#;username&#;);

applicationremoveAttribute(&#;pwd&#;);

%>

用戶名<%=applicationgetAttribute(&#;username&#;)%><br>

密?碼<%=applicationgetAttribute(&#;pwd&#;)%><br>

</body>

</html>

?使用application對象實現網站計數器

測試代碼

TestApplicationjsp

<%@?page?language=&#;java&#;?contentType=&#;text/html;?charset=GBK&#;%>

<%@?page?import=&#;javautil*&#;%>

<%?requestsetCharacterEncoding(&#;GBK&#;);%>

<html>

<body>

<%!

ServletContext?application;

synchronized?void?countPeople()?{

application?=?getServletContext();

Integer?number?=(Integer)applicationgetAttribute(&#;number&#;);

if?(number?==?null)?{

number?=?new?Integer();

applicationsetAttribute(&#;number&#;?number);

}?else?{

number?=?new?Integer(numberintValue()?+?);

applicationsetAttribute(&#;number&#;?number);

}

}

%>

<%

if?(sessionisNew())?{

countPeople();

}

int?personCount?=?((Integer)applicationgetAttribute(&#;number&#;))intValue();

%>

<p>歡迎訪問本網站您是第?<%=?personCount?%>?個訪問用戶!

</body>

</html>

?使用application對象獲取初始化參數

()?一?般來說在webxml文件中設置初始化參數有如下兩種方式

n?設置系統范圍內的初始化參數

n?針對單個Servlet文件或JSP文件設置初始化參數

對於系統范圍內的初始化參數可通過ServletContext?接口的getInitParameter(String?name)方法根據指定的參數名獲取對應的參數值

對於針對單個Servlet文件或JSP文件設置初始化參數可通過ServletConfig接口的?getInitParameter(String?name)方法根據指定的參數名獲取對應的參數值
()?如何設置系統范圍內的初始化參數

在webxml文件中可利用contextparam元素來設置系統范圍內的初始化參數contextparam元素應該包含paramnameparamvalue以及可選的description子元素如下所示
<contextparam>
<paramname>supportemail</paramname>
<paramvalue></paramvalue>
</contextparam>

webxml文件的示例

<?xml?version=&#;&#;?encoding=&#;UTF&#;?>

<webapp?version=&#;&#;

xmlns=&#;;

xmlns:xsi=&#;;?charset=GBK&#;?%>

<%?requestsetCharacterEncoding(&#;GBK&#;);?%>

<html>

<body>

<%&#;使用application對象獲取系統范圍內的初始化參數&#;%>

<font?color=&#;Red&#;>使用application對象獲取初始化參數</font>

<br>

<%

String?appName?=?getServletContext()getInitParameter(&#;appName&#;);

String?appVersion?=?getServletContext()getInitParameter(&#;appVersion&#;);

%>

應用程序的名稱<%=appName%><br>

應用程序的版本<%=appVersion%>

</body>

</html>

修改webxml文件添加藍色字體部分

<?xml?version=&#;&#;?encoding=&#;UTF&#;?>

<webapp?version=&#;&#;

xmlns=&#;;

xmlns:xsi=&#;;?charset=GBK&#;

pageEncoding=&#;GBK&#;%>

<%?requestsetCharacterEncoding(&#;GBK&#;);?%>

<html>

<body>

<h>使用application對象獲取Web應用程序的環境信息</h>

<p>

<font?color=&#;Red&#;>獲取當前Web服務器的版本信息</font><%=?applicationgetServerInfo()?%><br>

<font?color=&#;Red&#;>獲取Servlet?API的主版本號</font><%=?applicationgetMajorVersion()?%><br>

<font?color=&#;Red&#;>獲取Servlet?API的次版本號</font><%=?applicationgetMinorVersion()?%>

<p>

<font?color=&#;Red&#;>獲得指定URL的ServletContext對象</font>

<%

ServletContext?sc?=?applicationgetContext(&#;/ch/TestApplicationjsp&#;);

outprintln(scgetServerInfo());

%>

<p>

<%&#;需要在webxml設置?displayname?元素&#;%>

<font?color=&#;Red&#;>獲取當前Web應用程序的名稱</font><%=?applicationgetServletContextName()?%>

<p>

<font?color=&#;Red&#;>獲取當前Web應用程序的上下文路徑</font><%=?applicationgetContextPath()?%>

</body>

</html>

測試結果

session對象和application對象的比較

()?兩者的作用范圍不同

session對象是用戶級的對象而application對象是應用程序級的對象

一個用戶一個session對象每個用戶的session對象不同在用戶所訪問網站的多個頁面之間共享同一個session對象

一個Web應用程序一個application對象每個Web應用程序的application對象不同但一個Web應用程序的多個用戶之間共享同一個application對象

在同一個網站下

n?每個用戶的session對象不同

n?所用用戶的application對象相同

在不同網站下

n?每個用戶的session對象不同

n?每個用戶的application對象不同

()?兩者的生命周期不同

session對象的生命周期用戶首次訪問網站創建用戶離開該網站?(不一定要關閉浏覽器)?消亡

application對象的生命周期啟動Web服務器創建關閉Web服務器銷毀


From:http://tw.wingwit.com/Article/program/Java/hx/201404/30479.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.