put.jsp
[html]
<%@ page contentType="text/html; charset=GBK" language="java"
errorPage=""%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>application測試</title>
<meta name="website" content="http://www.crazyit.org" />
</head>
<body>
<!-- JSP聲明 -->
<%!int i;%>
<!-- 將i值自加後放入application的變量內 -->
<%
application.setAttribute("counter", String.valueOf(++i));
%>
<!-- 輸出i值 -->
<%=i%>
</body>
</html>
[html]
get.jsp
[html]
<%@ page contentType="text/html; charset=GBK" language="java"
errorPage=""%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>application測試</title>
<meta name="website" content="http://www.crazyit.org" />
</head>
<body>
<!-- 直接輸出application 變量值 -->
<%=application.getAttribute("counter")%>
</body>
</html>
此時在不同的浏覽器進程中刷新put.jsp頁面,無論在哪個浏覽器進程中訪問get.jsp頁面,必然得到的是連貫的值,因為counter的作用域是在application下,同時如果關閉浏覽器,在重新打開訪問put或者get頁面得到的還是上次訪問的值,因為application並沒有銷毀。同時注意,如果在不同浏覽器中訪問put頁面(不管浏覽器重新關閉打開與否),那麼值是連貫的(接著上一次訪問的" i " +1),因為這裡中jsp轉換為servlet(且只轉換成一次),在服務器後台中只有一個實例對象,所以大家訪問的 " i " 值是一樣的,直到服務器把servlet銷毀,或者服務器重啟重新部署服務器應用則重置“i ”為0。
如果代碼中的application換成session(一次服務器與浏覽器之間的連接,只有浏覽器不關閉,該連接就一直存在),那麼在不關閉浏覽器進程下,在那個浏覽器進程中訪問get.jsp頁面,得到的是那個浏覽器中session.setAttribute("counter", String.valueOf(++i));因為counter的作用域是在session下,不同浏覽器進程session不一樣。如果關閉浏覽器,則session銷毀。保存的counter變量值變為null。
如果代碼中application換成request,那麼不管何時何地訪問get頁面,得到的必然是null,因為重新訪問了get頁面,則是不同的請求request,所以request.getAttribute("counter")必定為空。
[java]