JSP九大內置對象及四個做用域

九大對象:java

內置對象(又叫隱含對象,有9個內置對象):不須要預先聲明就能夠在腳本代碼和表達式中隨意使用瀏覽器

1-out:tomcat

 javax.servlet.jsp.JspWriter類型,表明輸出流的對象。做用域爲page(頁面執行期)服務器

request:javax.servlet.ServletRequest的子類型,此對象封裝了由WEB瀏覽器或其它客戶端生成地HTTPcookie

請求的細節(參數,屬性,頭標和數據)。做用域爲request(用戶請求期)。
方法由可查看APIsession

response:javax.servlet.ServletResponse的子類型,此對象封裝了返回到HTTP客戶端的輸出,向頁面app

做者提供設置響應頭標和狀態碼的方式。常常用來設置HTTP標題,添加cookie,設置響應內容的類型和狀less

態,發送HTTP重定向和編碼URL。做用域爲page(頁面執行期)。jsp


pageContext:javax.servlet.jsp.PageContext(抽象類)類型,做用域爲page(頁面執行期)。此對象編碼

提供全部四個做用域層次的屬性查詢和修改能力,它也提供了轉發請求到其它資源和包含其餘資源的方法


該對象的方法都是抽象方法

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

HttpSession是一個相似哈希表的與單一WEB瀏覽器會話相關的對象,它存在於HTTP請求之間,能夠存儲任

何類型的命名對象。
若是不須要在請求之間跟蹤會話對象,能夠經過在page指令中指定session="false"
須要記住的是pageContext對象也能夠與session.getAttribute(),session.setAttribute()同樣的方式取

得並設置會話屬性。

application:javax.servlet.ServletContext類型,servlet的環境經過調用getServletConfig

().getContext()方法得到。做用域是application(整個程序運行期)。它提供了關於服務器版本,應用

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


config:javax.servlet.ServletConfig,做用域爲page(頁面執行期)

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

java.lang.Throwable的任意實例,傳向了errorPage的URI。做用域爲page(頁面執行期)。注意

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

page:java.lang.Object類型,指向頁面自身的方式。做用域爲page(頁面執行期

 

JSP中九大內置對象爲:
request            請求對象                 類型 javax.servlet.ServletRequest        做用域 Request
response          響應對象                   類型 javax.servlet.SrvletResponse       做用域  Page
pageContext    頁面上下文對象       類型 javax.servlet.jsp.PageContext      做用域    Page
session            會話對象                   類型 javax.servlet.http.HttpSession       做用域    Session
application       應用程序對象          類型 javax.servlet.ServletContext          做用域    Application
out                   輸出對象                   類型 javax.servlet.jsp.JspWriter             做用域    Page
config              配置對象                  類型 javax.servlet.ServletConfig            做用域    Page
page               頁面對象                  類型 javax.lang.Object                            做用域    Page
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文件中使用


 


四個做用域:

何爲做用域
先讓咱們看看效果:


大概流程是這樣的,咱們訪問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就能夠操做其餘三個做用域中的變量。

相關文章
相關標籤/搜索