在JSP頁面中的對象
包括用戶創建的對象(例如
JavaBean對象)和JSP的隱含對象
都有一個范圍屬性
范圍定義了在什麼時間內
在哪一個JSP頁面中可以訪問這些對象
例如
session對象在會話期間內
可以在多個頁面中被訪問
application對象在整個Web應用程序的生命周期中都可以被訪問
在JSP中
有
種范圍
如下所示
·page范圍
具有page范圍的對象被綁定到javax
Servlet
jsp
PageContext對象中
在這個范圍內的對象
只能在創建對象的頁面中訪問
可以調用pageContext這個隱含對象的getAttribute()方法來訪問具有這種范圍類型的對象(pageContext對象還提供了訪問其他范圍對象的getAttribute方法)
pageContext對象本身也屬於page范圍
當Servlet類的_jspService()方法執行完畢
屬於page范圍的對象的引用將被丟棄
page范圍內的對象
在客戶端每次請求JSP頁面時創建
在頁面向客戶端發送回響應或請求被轉發(forward)到其他的資源後被刪除
·request范圍
具有request范圍的對象被綁定到javax
servlet
ServletRequest對象中
可以調用request這個隱含對象的getAttribute()方法來訪問具有這種范圍類型的對象
在調用forward()方法轉向的頁面或者調用include()方法包含的頁面中
都可以訪問這個范圍內的對象
要注意的是
因為請求對象對於每一個客戶請求都是不同的
所以對於每一個新的請求
都要重新創建和刪除這個范圍內的對象
·session范圍
具有session范圍的對象被綁定到javax
servlet
http
HttpSession對象中
可以調用session這個隱含對象的getAttribute()方法來訪問具有這種范圍類型的對象
JSP容器為每一次會話
創建一個HttpSession對象
在會話期間
可以訪問session范圍內的對象
·application范圍
具有application范圍的對象被綁定到javax
servlet
ServletContext中
可以調用application這個隱含對象的getAttribute()方法來訪問具有這種范圍類型的對象
在Web應用程序運行期間
所有的頁面都可以訪問在這個范圍內的對象
下面我們通過幾個簡單的例子
來看一下這
種范圍對象的應用
.測試page范圍
test
jsp
<%
pageContext
setAttribute(
name
zhangsan
);
out
println(
test
jsp:
);
out
println(pageContext
getAttribute(
name
));
out
println(
<p>
);
pageContext
include(
test
jsp
);
%>
test
jsp
<%
out
println(
test
jsp:
);
out
println(pageContext
getAttribute(
name
));
%>
訪問test
jsp
將看到如下的輸出
test
jsp: zhangsan
test
jsp: null
說明保存在pageContext對象中的屬性具有page范圍
只能在同一個頁面中被訪問
.測試request范圍
修改test
jsp和test
jsp
如下所示
test
jsp
<%
request
setAttribute(
name
zhangsan
);
out
println(
test
jsp:
);
out
println(request
getAttribute(
name
));
out
println(
<p>
);
pageContext
include(
test
jsp
);
%>
test
jsp
<%
out
println(
test
jsp:
);
out
println(request
getAttribute(
name
));
%>
訪問testjsp將看到如下的輸出
testjsp: zhangsan
testjsp: zhangsan
說明保存在request對象中的屬性具有request范圍在請求對象存活期間可以訪問這個范圍內的對象將
pageContext
include(
test
jsp
);
這一句注釋起來
先訪問test
jsp
再訪問test
jsp
可以看到如下輸出
test
jsp: null
這是因為客戶端開始了一個新的請求
.測試session范圍
修改test
jsp和test
jsp
如下所示
test
jsp
<%
session
setAttribute(
name
zhangsan
);
%>
test
jsp
<%
out
println(
test
jsp:
);
out
println(session
getAttribute(
name
));
%>
先訪問test
jsp
然後在同一個浏覽器窗口中訪問test
jsp
可以看到如下輸出
test
jsp: zhangsan
說明保存在session對象中的屬性具有session范圍
在會話期間
可以訪問這個范圍內的對象
如果我們在訪問完test
jsp後
關閉浏覽器
重新打開浏覽器窗口
訪問test
jsp
將看到如下輸出
test
jsp: null
這是因為客戶端與服務器開始了一次新的會話
.測試application范圍
修改test
jsp和test
jsp
如下所示
test
jsp
<%
application
setAttribute(
name
zhangsan
);
%>
test
jsp
<%
out
println(
test
jsp:
);
out
println(application
getAttribute(
name
));
%>
先訪問testjsp然後關閉浏覽器再打開浏覽器窗口訪問testjsp可以看到如下輸出
testjsp: zhangsan
說明保存在application對象中的屬性具有application范圍在Web應用程序運行期間都可以訪問這個范圍內的對象
From:http://tw.wingwit.com/Article/program/SQL/201311/16142.html