JSP九大內建對象及四個範圍

來源:互聯網
上載者:User

九大對象:

 

內建對象(又叫隱含對象,有9個內建對象):不需要預先聲明就可以在指令碼代碼和運算式中隨意使用

1-out:

javax.servlet.jsp.JspWriter類型,代表輸出資料流的對象。範圍為page(頁面執行期)

2-request:

 javax.servlet.ServletRequest的子類型,此對象封裝了由WEB瀏覽器或其它用戶端產生地HTTP請求的細節(參數,屬性,頭標和資料)。範圍為request(使用者請求期)。方法由可查看API

 

3-response:

 javax.servlet.ServletResponse的子類型,此對象封裝了返回到HTTP用戶端的輸出,向頁面作者提供設定回應標頭標和狀態代碼的方式。經常用來設定HTTP標題,添加cookie,設定響應內容的類型和狀態,發送HTTP重新導向和編碼URL。範圍為page(頁面執行期)。

 

4-pageContext:

javax.servlet.jsp.PageContext(抽象類別)類型,範圍為page(頁面執行期)。此對象提供所有四個範圍層次的屬性查詢和修改能力,它也提供了轉寄請求到其它資源和包含其他資源的方法:該對象的方法都是抽象方法

 

5-session:

javax.servlet.http.HttpSession類型,主要用於跟蹤對話。範圍session(會話期—)。

HttpSession是一個類似雜湊表的與單一WEB瀏覽器會話相關的對象,它存在於HTTP請求之間,可以儲存任何類型的命名物件。

如果不需要在請求之間跟蹤會話對象,可以通過在page指令中指定session="false"

需要記住的是pageContext對象也可以與session.getAttribute(),session.setAttribute()一樣的方式取得並設定會話屬性。

 

6-application:

javax.servlet.ServletContext類型,servlet的環境通過調用getServletConfig().getContext()方法獲得。範圍是application(整個程式運行期)。它提供了關於伺服器版本,應用

 級初始化參數和應用內資源絕對路徑,註冊資訊的方式

 

7-config:

 javax.servlet.ServletConfig,範圍為page(頁面執行期)

 

8-page:

 java.lang.Object類型,指向頁面自身的方式。範圍為page(頁面執行期

 

9-exception:

 java.lang.Throwable,通過JSP錯誤頁面中一個catch塊已經益出但沒有捕獲的

java.lang.Throwable的任意執行個體,傳向了errorPage的URI。範圍為page(頁面執行期)。注意

 exception只有在page指令中具有屬性isErrorPage="true"時才有效。

 

JSP中九大內建對象為: 

1 request            請求對象                 類型 javax.servlet.ServletRequest        範圍 Request

2 response          響應對象                   類型 javax.servlet.SrvletResponse       範圍  Page

3 pageContext    頁面內容物件       類型 javax.servlet.jsp.PageContext      範圍    Page

4 session            會話對象                   類型 javax.servlet.http.HttpSession       範圍    Session

5 application       應用程式物件          類型 javax.servlet.ServletContext          範圍    Application

6 out                   輸出對象                   類型 javax.servlet.jsp.JspWriter             範圍    Page

7 config              設定物件                  類型 javax.servlet.ServletConfig            範圍    Page

8 page               頁面對象                  類型 javax.lang.Object                            範圍    Page

9 exception        例外對象                 類型 javax.lang.Throwable                     範圍    page

 

request 對象代表的是來自用戶端的請求,例如我們在FORM表單中填寫的資訊等,是最常用的對象

 

常用的方法有:getParameter、getParameterNames 和getParameterValues 通過調用這幾個方法來擷取請求對象中所包含的參數的值。

 

response 對象代表的是對用戶端的響應,也就是說可以通過response 對象來組織發送到用戶端的資料。但是由於組織方式比較底層,所以不建議普通讀者使用,需要向用戶端發送文字時直接使用

 

pageContext 對象直譯時可以稱作“頁面上下文”對象,代表的是當前頁面啟動並執行一些屬性

 

常用的方法有 :findAttribute、getAttribute、getAttributesScope 和getAttributeNamesInScope

一般情況下pageContext對象用到得也不是很多,只有在項目所面臨的情況比較複雜的情況下,才會利用到頁面屬性來輔助處理。

 

session    對象代表格服務器與用戶端所建立的會話,當需要在不同的JSP頁面中保留客戶資訊的情況下使用,比如線上購物、客戶軌跡跟蹤等。“session” 對象建立在cookie的基礎上,所以使用時應注意判斷一下用戶端是否開啟了cookie。常用的方法包括getId、 getValue、 getValueNames和putValue等。

 

概要

HTTP是無狀態(stateless)協議;

Web Server 對每一個用戶端請求都沒有曆史記憶;

Session用來儲存用戶端狀態資訊;

由Web Server 寫入;

存於用戶端;

用戶端的每次訪問都把上次的session記錄傳遞給Web Server;

Web Server讀取用戶端提交的session來擷取用戶端的狀態資訊

 

application 對象負責提供應用程式在伺服器中運行時的一些全域資訊,常用的方法有getMimeType和getRealPath等。

 

out 對象代表了向用戶端發送資料的對象,與“response” 對象不同,通過“out” 對象發送的內容將是瀏覽器需要顯示的內容,是文本一級的,可以通過“out” 對象直接向用戶端寫一個由程式動態產生HTML檔案。常用的方法除了pirnt和println之外,還包括clear、clearBuffer、flush、getBufferSize和getRemaining,這是因為“out” 對象內部包含了一個緩衝區,所以需要一些對緩衝區進行操作的方法

 

config 對象提供一些配置資訊,常用的方法有getInitParameter和getInitParameterNames,以獲得Servlet初始化時的參數。

 

page 對象代表了正在啟動並執行由JSP檔案產生的類對象,不建議一般讀者使用。

 

exception 對象則代表了JSP檔案運行時所產生的例外對象,此對象不能在一般JSP檔案中直接使用,而只能在使用了“<%@ page isErrorPage="true "%>”的JSP檔案中使用

 

 

 

 

 

四個範圍:pageContext,request,session,application

 

何為範圍 

先讓我們看看效果:

 

 

大概流程是這樣的,我們訪問04-01/index.jsp的時候,分別對pageContext, request, session,

 

application四個範圍中的變數進行累加。(當然先判斷這個變數是不是存在,如果變數不存在,則要

 

把變數初始化成1。)計算完成後就從index.jsp執行forward跳轉到test.jsp。在test.jsp裡再進行一次

 

累加,然後顯示出這四個整數來。

 

從顯示的結果來看,我們可以直觀的得出結論:

 

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都是完全隔離的,無論如何修改都不會影響其他人的資料。

 

我們使用public Object getAttribute(String name)獲得變數值,使用public void setAttribute

 

(String name, Object value)將變數值儲存到對應範圍中。舉個pageContext的例子就是:

 

// page

Integer countPage = (Integer) pageContext.getAttribute("countPage");

if (countPage == null) {

    pageContext.setAttribute("countPage", 1);

} else {

    pageContext.setAttribute("countPage", countPage + 1);

}

這裡先從pageContext中取出名為countPage的整數,因為返回的都是java.lang.Object類型,所以需要強

 

制轉換成我們需要的整形。這裡取得的變數如果不存在就會返回null,通過判斷countPage == null來辨

 

別變數是否存在,如果不存在就設定為1,如果存在就進行累加,最後使用setAttribute()方法將修改後

 

的變數值放入pageContext。

 

將其中的pageContext換成request, session, application就可以操作其他三個範圍中的變數。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.