page request session application 範圍

在JSP頁面中的對象,包括用戶建立的對象(例如,JavaBean對象)和JSP的隱含對象,都有一個範圍屬性。範圍定義了在什麼時間內,java

在哪個JSP頁面中能夠訪問這些對象。例如,session對象在會話期間內,能夠在多個頁面中被訪問。application對象在整個Web應瀏覽器

用程序的生命週期中均可以被訪問。在JSP中,有4種範圍,以下所示。服務器

1. page範圍session

具備page範圍的對象被綁定到javax.servlet.jsp.PageContext對象中。在這個範圍內的對象,只能在建立對象的頁面中訪問。能夠調app

用pageContext這個隱含對象的getAttribute()方法來訪問具備這種範圍類型的對象(pageContext對象還提供了訪問其餘範圍對象的jsp

getAttribute方法),pageContext對象自己也屬於page範圍。當Servlet類的_jspService()方法執行完畢,屬於page範圍的對象的測試

引用將被丟棄。page範圍內的對象,在客戶端每次請求JSP頁面時建立,在頁面向客戶端發送迴響應或請求被轉發(forward)到其code

他的資源後被刪除。對象

2. request範圍生命週期

具備request範圍的對象被綁定到javax.servlet.ServletRequest對象中,能夠調用request這個隱含對象的getAttribute()方法來訪問

具備這種範圍類型的對象。在調用forward()方法轉向的頁面或者調用include()方法包含的頁面中,均可以訪問這個範圍內的對象。

要注意的是,由於請求對象對於每個客戶請求都是不一樣的,因此對於每個新的請求,都要從新建立和刪除這個範圍內的對象。

request對象的主要方法:

一、 getParameter(String name) return String

二、 getParameterNames() return Enumeration

三、 getParameterValues(String name) return String[]

3.session範圍

具備session範圍的對象被綁定到javax.servlet.http.HttpSession對象中,能夠調用session這個隱含對象的getAttribute()方法來訪問

具備這種範圍類型的對象。JSP容器爲每一次會話,建立一個HttpSession對象,在會話期間,能夠訪問session範圍內的對象。

Session對象的主要方法:

一、 getAttribute(String name) return Object

二、 getAttributeNames() return Enumeration

三、 getCreationTime() return long

四、 getId() return String

五、 GetLastAccessedTime() return long

六、 GetMaxInactiveInterval() return int

七、 RemoveAttribute(String name) void

八、 SetAttribute(String name , java.lang.Object value) void

4.application範圍

具備application範圍的對象被綁定到javax.servlet.ServletContext中,能夠調用application這個隱含對象的getAttribute()方法來訪問

具備這種範圍類型的對象。在Web應用程序運行期間,全部的頁面均可以訪問在這個範圍內的對象。

application對象的主要方法:

一、 getAttribute(String name) return Object

二、 getAttributeNames() return Enumeration

三、 getInitParameter(String name)

四、 getServletInfo()

五、 setAttribute(String name , Object object)

下面咱們經過幾個簡單的例子,來看一下這4種範圍對象的應用。

1.測試page範圍

test1.jsp

<%
pageContext.setAttribute("name","zhangsan");
out.println("test1.jsp: ");
out.println(pageContext.getAttribute("name"));
out.println("<p>");
pageContext.include("test2.jsp");
%>

test2.jsp

<%
out.println("test2.jsp: ");
out.println(pageContext.getAttribute("name"));
%>

訪問test1.jsp,將看到以下的輸出:

test1.jsp: zhangsan

test2.jsp: null

說明保存在pageContext對象中的屬性具備page範圍,只能在同一個頁面中被訪問。

2.測試request範圍

修改test1.jsp和test2.jsp,以下所示。

test1.jsp

<%
request.setAttribute("name","zhangsan");
out.println("test1.jsp: ");
out.println(request.getAttribute("name"));
out.println("<p>");
pageContext.include("test2.jsp");
%>

test2.jsp

<%
out.println("test2.jsp: ");
out.println(request.getAttribute("name"));
%>

訪問test1.jsp,將看到以下的輸出:

test1.jsp: zhangsan
test2.jsp: zhangsan

說明保存在request對象中的屬性具備request範圍,在請求對象存活期間,能夠訪問這個範圍內的對象。

將pageContext.include("test2.jsp"); 這一句註釋起來,先訪問test1.jsp,再訪test2.jsp,能夠看到以下輸出:

test2.jsp: null

這是由於客戶端開始了一個新的請求。

3.測試session範圍

修改test1.jsp和test2.jsp,以下所示。

test1.jsp

<%
session.setAttribute("name","zhangsan");
%>

test2.jsp

<%
out.println("test2.jsp: ");
out.println(session.getAttribute("name"));
%>

先訪問test1.jsp,而後在同一個瀏覽器窗口中訪問test2.jsp,能夠看到以下輸出:

test2.jsp: zhangsan

說明保存在session對象中的屬性具備session範圍,在會話期間,能夠訪問這個範圍內的對象。

若是咱們在訪問完test1.jsp後,關閉瀏覽器,從新打開瀏覽器窗口,訪問test2.jsp,將看到以下輸出:

test2.jsp: null

這是由於客戶端與服務器開始了一次新的會話。

4.測試application範圍

修改test1.jsp和test2.jsp,以下所示。

test1.jsp

<%
application.setAttribute("name","zhangsan");
%>

test2.jsp

<%
out.println("test2.jsp: ");
out.println(application.getAttribute("name"));
%>

先訪問test1.jsp,而後關閉瀏覽器,再打開瀏覽器窗口,訪問test2.jsp,能夠看到以下輸出:

test2.jsp: zhangsan

說明保存在application對象中的屬性具備application範圍,在Web應用程序運行期間,均可以訪問這個範圍內的對象。

相關文章
相關標籤/搜索