詳解JSP九大內置對象及對應作用域

Jsp九大內置對象及對應作用域

JSP九大內置對象:
一 request對象:
該對象封裝了用戶提交的信息,通過調用該對象相應的方法可以獲取封裝的信息, 即使用該對象可以獲取用戶提交信息。
二 response對象:
對客戶的請求做出動態的響應,向客戶端發送數據。
三 session對象
1.什麼是session:session對象是一個JSP內置對象,它在第一個JSP頁面被裝載時自動創建,完成會話期管理。
從一個客戶打開瀏覽器並連接到服務器開始,到客戶關閉瀏覽器離開這個服務器結束,被稱爲一個會話。當一個客戶訪問一個服務器時,可能會在這個服務器的幾個頁面之間反覆連接,反覆刷新一個頁面,服務器應當通過某種辦法知道這是同一個客戶,這就需要session對象。
2.session對象的ID:當一個客戶首次訪問服務器上的一個JSP頁面時,JSP引擎產生一個session對象,同時分配一個String類型的ID號,JSP引擎同時將這個ID號發送到客戶端,存放在Cookie中,這樣session對象和客戶之間就建立了一一對應的關係。當客戶再訪問連接該服務器的其他頁面時,不再分配給客戶新的session對象,直到客戶關閉瀏覽器後,服務器端該客戶的session對象才取消,並且和客戶的會話對應關係消失。當客戶重新打開瀏覽器再連接到該服務器時,服務器爲該客戶再創建一個新的session對象。
四 aplication對象
1.什麼是application:
服務器啓動後就產生了這個application對象,當客戶在所訪問的網站的各個頁面之間瀏覽時,這個application對象都是同一個,直到服務器關閉。但是與session不同的是,所有客戶的application對象都是同一個,即所有客戶共享這個內置的application對象。
2.application對象常用方法:
(1)public void setAttribute(String key,Object obj): 將參數Object指定的對象obj添加到application對象中,併爲添加的對象指定一個索引關鍵字。
(2)public Object getAttribute(String key): 獲取application對象中含有關鍵字的對象。
五 out對象
out對象是一個輸出流,用來向客戶端輸出數據。out對象用於各種數據的輸出。
六 page java.lang.Object
對應this關鍵字。JSP網頁本身
page對象是當前頁面轉換後的Servlet類的實例。從轉換後的Servlet類的代碼中,可以看到這種關係:
Object page = this;
在JSP頁面中,很少使用page對象。
七 config
javax.servlet. ServletConfig 的實例,該實例代表該JSP 的配置信息。常用的方法有getInitPararneter(String paramNarne) 及getInitPararneternarnes() 等方法。事實上, JSP 頁面通常無須配置,也就不存在配置信息。因此,該對象更多地在Servlet 中有效。
八 exception java.lang.Throwable 的實例
該實例代表其他頁面中的異常和錯誤。只有當頁面是錯誤處理頁面,即編譯指令page 的isErrorPage 屬性爲true 時,該對象纔可以使用。常用的方法有getMessageO和printStackTraceO等。

九 pageContext
javax.servlet.jsp.PageContext 的實例,對象直譯時可以稱作“頁面上下文”對象,代表的是當前頁面運行的一些屬性,通過此對象可以拿到其他8大對象,使用該對象可以訪問頁面中的共享數據。常用的方法有getServletContextO和getServletConfigO等。

//使用pageContext 設置屬性,該屬性默認在page 範圍內
pageContext. setAttribute (“page” , “hello”) ;

//使用request 設置屬性,該屬性默認在request 範圍內
request. setAttribute (“request” , “hello”);

//使用pageContext將屬性設置在request 範圍中
pageContext.setAttribute(“request2” , “hello” , pageContext.REQUEST_SCOPE);

// 使用session將屬性設置在session 範圍中
session.setAttribute(“session” , “hello”l;

//使用pageContext將屬性設置在session範圍中
pageContext.setAttribute(“session2” , “hello” , pageContext.SESSION_SCOPE);

//使用application將屬性設置在application範圍中
application. setAttribute (“app” , “hello”) ;

//使用pageContext 將屬性設置在application 範圍中
pageContext.setAttribute(“app2” , “hello” , pageContext.APPL 工CATION_SCOPE) ;

四大作用域:request域 session域 application域 page域

  作用域規定的是變量的有效期限。
  如果把變量放到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就可以操作其他三個作用域中的變量。

發佈了25 篇原創文章 · 獲贊 12 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章