1. 程式人生 > >JSP中page和pageContext的區別

JSP中page和pageContext的區別

JSP網頁本身,page物件是當前頁面轉換後的Servlet類的例項。從轉換後的Servlet類的程式碼中,可以看到這種關係:Object page = this;在JSP頁面中,很少使用page物件。

pageContext  javax.servlet.jsp.PageContext 的例項,該物件代表該JSP 頁面上下文,使用該物件可以訪問頁面中的共享資料。常用的方法有getServletContext和getServletConfig等.

總的來說,pageContext和page都是jsp中的隱含物件,pageContext代表jsp頁面的上下文關係,能夠呼叫、存取其他隱含物件;page代表處理當前請求的時候,這個頁面的實現類的例項。


1.page指當前頁面。只在一個jsp頁面裡有效 。
2.request 指從http請求到伺服器處理結束,返回響應的整個過程。在這個過程中使用forward方式跳轉多個jsp。在這些頁面裡你都可以使用這個變數。 
3.Session 有效範圍當前會話,從瀏覽器開啟到瀏覽器關閉這個過程。 
4.application它的有效範圍是整個應用。 
作用域裡的變數,它們的存活時間是最長的,如果不進行手工刪除,它們就一直可以使用 
page裡的變數沒法從index.jsp傳遞到test.jsp。只要頁面跳轉了,它們就不見了。 
request裡的變數可以跨越forward前後的兩頁。但是隻要重新整理頁面,它們就重新計算了。 
session和application裡的變數一直在累加,開始還看不出區別,只要關閉瀏覽器,再次重啟瀏覽器訪問這頁,session裡的變數就重新計算了。 
application裡的變數一直在累加,除非你重啟tomcat,否則它會一直變大。 
而作用域規定的是變數的有效期限。 
如果把變數放到pageContext裡,就說明它的作用域是page,它的有效範圍只在當前jsp頁面裡。 
從把變數放到pageContext開始,到jsp頁面結束,你都可以使用這個變數。 
如果把變數放到request裡,就說明它的作用域是request,它的有效範圍是當前請求週期。 
所謂請求週期,就是指從http請求發起,到伺服器處理結束,返回響應的整個過程。在這個過程中可能使用forward的方式跳轉了多個jsp頁面,在這些頁面裡你都可以使用這個變數。
如果把變數放到session裡,就說明它的作用域是session,它的有效範圍是當前會話。 
所謂當前會話,就是指從使用者開啟瀏覽器開始,到使用者關閉瀏覽器這中間的過程。這個過程可能包含多個請求響應。也就是說,只要使用者不關瀏覽器,伺服器就有辦法知道這些請求是一個人發起的,整個過程被稱為一個會話(session),而放到會話中的變數,就可以在當前會話的所有請求裡使用。
如果把變數放到application裡,就說明它的作用域是application,它的有效範圍是整個應用。 
整個應用是指從應用啟動,到應用結束。我們沒有說“從伺服器啟動,到伺服器關閉”,是因為一個伺服器可能部署多個應用,當然你關閉了伺服器,就會把上面所有的應用都關閉了。
application作用域裡的變數,它們的存活時間是最長的,如果不進行手工刪除,它們就一直可以使用。 
與上述三個不同的是,application裡的變數可以被所有使用者共用。如果使用者甲的操作修改了application中的變數,使用者乙訪問時得到的是修改後的值。這在其他scope中都是不會發生的,page, request, session都是完全隔離的,無論如何修改都不會影響其他人的資料。

pageContext物件的範圍只適用於當前頁面範圍,即超過這個頁面就不能夠使用了。所以使用pageContext物件向其它頁面傳遞引數是不可能的。 
request物件的範圍是指在一JSP網頁發出請求到另一個JSP網頁之間,隨後這個屬性就失效。 
session的作用範圍為一段使用者持續和伺服器所連線的時間,但與伺服器斷線後,這個屬性就無效。比如斷網或者關閉瀏覽器。 
application的範圍在伺服器一開始執行服務,到伺服器關閉為止。它的範圍最大,生存週期最長。