jsp九大內置對象和四大做用域

看到網上一些Jsp內置對象介紹的都不是很全,今天我把各位大神的整理了一下。java

 

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

1、request對象:表明的是來自客戶端的請求,例如咱們在FORM表單中填寫的信息等,是最經常使用的對象。客戶端的請求信息被封裝在request對象中,經過它才能瞭解到客戶的需求,而後作出響應。它是HttpServletRequest類的實例。做用域爲request(用戶請求期)。瀏覽器

經常使用方法:tomcat

 

   1 object getAttribute(String name) 返回指定屬性的屬性值 服務器

  2 Enumeration getAttributeNames() 返回全部可用屬性名的枚舉 session

  3 String getCharacterEncoding() 返回字符編碼方式 app

  4 int getContentLength() 返回請求體的長度(以字節數) jsp

  5 String getContentType() 獲得請求體的MIME類型 this

  6 ServletInputStream getInputStream() 獲得請求體中一行的二進制流 編碼

  7 String getParameter(String name) 返回name指定參數的參數值 

  8 Enumeration getParameterNames() 返回可用參數名的枚舉 

  9 String[] getParameterValues(String name) 返回包含參數name的全部值的數組 

  10 String getProtocol() 返回請求用的協議類型及版本號 

  11 String getScheme() 返回請求用的計劃名,如:http.https及ftp等 

  12 String getServerName() 返回接受請求的服務器主機名 

  13 int getServerPort() 返回服務器接受此請求所用的端口號 

  14 BufferedReader getReader() 返回解碼過了的請求體 

  15 String getRemoteAddr() 返回發送此請求的客戶端IP地址 

  16 String getRemoteHost() 返回發送此請求的客戶端主機名 

  17 void setAttribute(String key,Object obj) 設置屬性的屬性值 

  18 String getRealPath(String path) 返回一虛擬路徑的真實路徑

2、response對象:對象表明的是對客戶端的響應,也就是說能夠經過response 對象來組織發送到客戶端的數據。可是因爲組織方式比較底層,因此不建議普通讀者使用,須要向客戶端發送文字時直接使用。它是HttpServletResponse類的實例。做用域爲page(頁面執行期)。

經常使用方法:

 

   1 String getCharacterEncoding() 返回響應用的是何種字符編碼 

  2 ServletOutputStream getOutputStream() 返回響應的一個二進制輸出流 

  3 PrintWriter getWriter() 返回能夠向客戶端輸出字符的一個對象 

  4 void setContentLength(int len) 設置響應頭長度 

  5 void setContentType(String type) 設置響應的MIME類型 

  6 sendRedirect(Java.lang.String location) 從新定向客戶端的請求 

3、session對象:指的是客戶端與服務器的一次會話,從客戶連到服務器的一個WebApplication開始,直到客戶端與服務器斷開鏈接爲止。它是HttpSession類的實例。做用域session(會話期—)。

經常使用方法:

 

    1 long getCreationTime() 返回SESSION建立時間 

  2 public String getId() 返回SESSION建立時JSP引擎爲它設的唯一ID號 

  3 long getLastAccessedTime() 返回此SESSION裏客戶端最近一次請求時間 

  4 int getMaxInactiveInterval() 返回兩次請求間隔多長時間此SESSION被取消(ms) 

  5 String[] getValueNames() 返回一個包含此SESSION中全部可用屬性的數組 

  6 void invalidate() 取消SESSION,使SESSION不可用 

  7 boolean isNew() 返回服務器建立的一個SESSION,客戶端是否已經加入 

  8 void removeValue(String name) 刪除SESSION中指定的屬性 

  9 void setMaxInactiveInterval() 設置兩次請求間隔多長時間此SESSION被取消(ms)

4、out對象 :out對象是JspWriter類的實例,是向客戶端輸出內容經常使用的對象 。做用域爲page(頁面執行期)

經常使用方法:

 

    1 void clear() 清除緩衝區的內容 

  2 void clearBuffer() 清除緩衝區的當前內容 

  3 void flush() 清空流 

  4 int getBufferSize() 返回緩衝區以字節數的大小,如不設緩衝區則爲0 

  5 int getRemaining() 返回緩衝區還剩餘多少可用 

  6 boolean isAutoFlush() 返回緩衝區滿時,是自動清空仍是拋出異常 

  7 void close() 關閉輸出流 

5、page對象:page對象就是指向當前JSP頁面自己,有點象類中的this指針,它是java.lang.Object類的實例 。「page」 對象表明了正在運行的由JSP文件產生的類對象,不建議通常讀者使用。 做用域    page

經常使用方法:

 

    1 class getClass 返回此Object的類 

  2 int hashCode() 返回此Object的hash碼 

  3 boolean equals(Object obj) 判斷此Object是否與指定的Object對象相等 

  4 void copy(Object obj) 把此Object拷貝到指定的Object對象中 

  5 Object clone() 克隆此Object對象 

  6 String toString() 把此Object對象轉換成String類的對象 

  7 void notify() 喚醒一個等待的線程 

  8 void notifyAll() 喚醒全部等待的線程 

  9 void wait(int timeout) 使一個線程處於等待直到timeout結束或被喚醒 

  10 void wait() 使一個線程處於等待直到被喚醒 

  11 void enterMonitor() 對Object加鎖 

  12 void exitMonitor() 對Object開鎖

6、application對象:實現了用戶間數據的共享,可存放全局變量。它開始於服務器的啓動,直到服務器的關閉,在此期間,此對象將一直存在;這樣在用戶的先後鏈接或不一樣用戶之間的鏈接中,能夠對此對象的同一屬性進行操做;在任何地方對此對象屬性的操做,都將影響到其餘用戶對此的訪問。服務器的啓動和關閉決定了application對象的生命。它是ServletContext類的實例。做用域application

經常使用方法:

 

   1 Object getAttribute(String name) 返回給定名的屬性值 

  2 Enumeration getAttributeNames() 返回全部可用屬性名的枚舉 

  3 void setAttribute(String name,Object obj) 設定屬性的屬性值 

  4 void removeAttribute(String name) 刪除一屬性及其屬性值 

  5 String getServerInfo() 返回JSP(SERVLET)引擎名及版本號 

  6 String getRealPath(String path) 返回一虛擬路徑的真實路徑 

  7 ServletContext getContext(String uripath) 返回指定WebApplication的application對象 

  8 int getMajorVersion() 返回服務器支持的Servlet API的最大版本號 

  9 int getMinorVersion() 返回服務器支持的Servlet API的最大版本號 

  10 String getMimeType(String file) 返回指定文件的MIME類型 

  11 URL getResource(String path) 返回指定資源(文件及目錄)的URL路徑 

  12 InputStream getResourceAsStream(String path) 返回指定資源的輸入流 

  13 RequestDispatcher getRequestDispatcher(String uripath) 返回指定資源的RequestDispatcher對象 

  14 Servlet getServlet(String name) 返回指定名的Servlet 

  15 Enumeration getServlets() 返回全部Servlet的枚舉 

  16 Enumeration getServletNames() 返回全部Servlet名的枚舉 

  17 void log(String msg) 把指定消息寫入Servlet的日誌文件 

  18 void log(Exception exception,String msg) 把指定異常的棧軌跡及錯誤消息寫入Servlet的日誌文件 

  19 void log(String msg,Throwable throwable) 把棧軌跡及給出的Throwable異常的說明信息 寫入Servlet的日誌文件 

7、pageContext對象提供了對JSP頁面內全部的對象及名字空間的訪問,也就是說他能夠訪問到本頁所在的SESSION,也能夠取本頁面所在的application的某一屬性值,他至關於頁面中全部功能的集大成者,它的本類名也叫pageContext。用域    Pageconfig對象

經常使用方法:

 

    1 JspWriter getOut() 返回當前客戶端響應被使用的JspWriter流(out) 

  2 HttpSession getSession() 返回當前頁中的HttpSession對象(session) 

  3 Object getPage() 返回當前頁的Object對象(page) 

  4 ServletRequest getRequest() 返回當前頁的ServletRequest對象(request) 

  5 ServletResponse getResponse() 返回當前頁的ServletResponse對象(response) 

  6 Exception getException() 返回當前頁的Exception對象(exception) 

  7 ServletConfig getServletConfig() 返回當前頁的ServletConfig對象(config) 

  8 ServletContext getServletContext() 返回當前頁的ServletContext對象(application) 

  9 void setAttribute(String name,Object attribute) 設置屬性及屬性值 

  10 void setAttribute(String name,Object obj,int scope) 在指定範圍內設置屬性及屬性值 

  11 public Object getAttribute(String name) 取屬性的值 

  12 Object getAttribute(String name,int scope) 在指定範圍內取屬性的值 

  13 public Object findAttribute(String name) 尋找一屬性,返回起屬性值或NULL 

  14 void removeAttribute(String name) 刪除某屬性 

  15 void removeAttribute(String name,int scope) 在指定範圍刪除某屬性 

  16 int getAttributeScope(String name) 返回某屬性的做用範圍 

  17 Enumeration getAttributeNamesInScope(int scope) 返回指定範圍內可用的屬性名枚舉 

  18 void release() 釋放pageContext所佔用的資源 

  19 void forward(String relativeUrlPath) 使當前頁面重導到另外一頁面 

  20 void include(String relativeUrlPath) 在當前位置包含另外一文件 

8、config對象:config對象是在一個Servlet初始化時,JSP引擎向它傳遞信息用的,此信息包括Servlet初始化時所要用到的參數(經過屬性名和屬性值構成)以及服務器的有關信息(經過傳遞一個ServletContext對象)。做用域    Page

經常使用方法:

 

   1 ServletContext getServletContext() 返回含有服務器相關信息的ServletContext對象 

  2 String getInitParameter(String name) 返回初始化參數的值 

  3 Enumeration getInitParameterNames() 返回Servlet初始化所需全部參數的枚舉

9、exception對象:是一個例外對象,當一個頁面在運行過程當中發生了例外,就產生這個對象。若是一個JSP頁面要應用此對象,就必須把isErrorPage設爲true,不然沒法編譯。他其實是java.lang.Throwable的對象.做用域    page

經常使用方法:

 

    1 String getMessage() 返回描述異常的消息 

  2 String toString() 返回關於異常的簡短描述消息 

  3 void printStackTrace() 顯示異常及其棧軌跡 

  4 Throwable FillInStackTrace() 重寫異常的執行棧軌跡

 

 
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

 

 

四個做用域:

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


大概流程是這樣的,咱們訪問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的例子就是:

 

[java]  view plain  copy
 
 在CODE上查看代碼片派生到個人代碼片
  1. // page  
  2. Integer countPage = (Integer) pageContext.getAttribute("countPage");  
  3. if (countPage == null) {  
  4.     pageContext.setAttribute("countPage", 1);  
  5. else {  
  6.     pageContext.setAttribute("countPage", countPage + 1);  
  7. }  


這裏先從pageContext中取出名爲countPage的整數,由於返回的都是java.lang.Object類型,因此須要強

 

 

制轉換成咱們須要的整形。這裏取得的變量若是不存在就會返回null,經過判斷countPage == null來辨

別變量是否存在,若是不存在就設置爲1,若是存在就進行累加,最後使用setAttribute()方法將修改後

的變量值放入pageContext。

將其中的pageContext換成request, session, application就能夠操做其餘三個做用域中的變量。

相關文章
相關標籤/搜索