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

來源:互聯網
上載者:User

標籤:改變   protocol   問題   索引   操作   base   繼承   plain   write   

JSP中一共預先定義了9個這樣的對象,分別為:request、response、session、application、out、pagecontext、config、page、exception

1、request對象javax.servlet.http.HttpServletRequest

request對象代表了用戶端的請求資訊,主要用於接受通過HTTP協議傳送到伺服器的資料。(包括頭資訊、系統資訊、請求方式以及請求參數等)。request對 象的範圍為一次請求。

當Request對象擷取客戶提交的漢字字元時,會出現亂碼問題,必須進行特殊處理。首先,將擷取的字串用ISO-8859-1進行編碼,並將編碼存發島一個位元組數組中,然後再將這個數組轉化為字串對象如下

Request常用的方法:getParameter(String strTextName) 擷取表單提交的資訊.

getProtocol() 擷取客戶使用的協議。

String strProtocol=request.getProtocol();

getServletPath() 擷取客戶提交資訊的頁面。String strServlet=request.getServletPath();

getMethod() 擷取客戶提交資訊的方式 String strMethod=request.getMethod();

getHeader() 擷取HTTP標頭檔中的accept,accept-encoding和Host的值,String strHeader=request.getHeader();

getRermoteAddr() 擷取客戶的IP地址。String strIP=request.getRemoteAddr();

getRemoteHost() 擷取客戶機的名稱。String clientName=request.getRemoteHost();

getServerName() 擷取伺服器名稱。 String serverName=request.getServerName();

getServerPort() 擷取伺服器的連接埠號碼。 int serverPort=request.getServerPort();

getParameterNames() 擷取用戶端提交的所有參數的名字。 

 

[html] view plain copy 
  1. Enumeration enum = request.getParameterNames();  
  2. while(enum.hasMoreElements())  
  3. {  
  4.     Strings(String)enum.nextElement();  
  5.     out.println(s);  
  6. }  
2、response對象 javax.servlet.http.HttpServletResponse

response 代表的是對用戶端的響應,主要是將JSP容器處理過的對象傳回到用戶端。response對象也具有範圍,它只在JSP頁面內有效。

具有動態響應contentType屬性,當一個使用者訪問一個JSP頁面時,如果該頁面用page指令設定頁面的contentType屬性是text/html,那麼JSP引擎將按照這個屬性值做出反應。

如果要動態改變這換個屬性值來響應客戶,就需要使用Response對象的setContentType(String s)方法來改變contentType的屬性值。

response.setContentType(String s);  參數s可取text/html,application/x-msexcel,application/msword等。

在某些情況下,當響應客戶時,需要將客戶重新引導至另一個頁面,可以使用Response的sendRedirect(URL)方法實現客戶的重新導向。

例如response.sendRedirect(index.jsp);

3、session對象 javax.servlet.http.HttpSession

Session對象是一個JSP內建對象,它在第一個JSP頁面被裝載時自動建立,完成會話期管理。從一個客戶開啟瀏覽器並串連到伺服器開始,到客戶關閉瀏覽器離開這個伺服器結束,被稱為一個會話。當一個客戶訪問一個伺服器時,可能會在這個伺服器的幾個頁面之間切換,伺服器應當通過某種辦法知道這是一個客戶,就需要Session對象。

當一個客戶首次訪問伺服器上的一個JSP頁面時,JSP引擎產生一個Session對象,同時分配一個String類型的ID號,JSP引擎同時將這換個ID號發送到用戶端,存放在Cookie中,這樣Session對象,直到客戶關閉瀏覽器後,伺服器端該客戶的Session對象才取消,並且和客戶的會話對應關係消失。當客戶重新開啟瀏覽器再串連到該伺服器時,伺服器為該客戶再建立一個新的Session對象。

session 對象是由伺服器自動建立的與使用者請求相關的對象。伺服器為每個使用者都產生一個session對象,用於儲存該使用者的資訊,跟蹤使用者的操作狀態。

 session對象內部使用Map類來儲存資料,因此儲存資料的格式為 “Key/value”。 session對象的value可以使複雜的物件類型,而不僅僅局限於字串類型。

public String getId():擷取Session對象編號。

public void setAttribute(String key,Object obj):將參數Object指定的對象obj添加到Session對象中,並為添加的對象指定一個索引關鍵字。

public Object getAttribute(String key):擷取Session對象中含有關鍵字的對象。

public Boolean isNew():判斷是否是一個新的客戶。

4、application對象javax.servlet.ServletContext

application 對象可將資訊儲存在伺服器中,直到伺服器關閉,否則application對象中儲存的資訊會在整個應用中都有效。與session對象相比,application對象生命週期更長,類似於系統的“全域變數”。

伺服器啟動後就產生了這個Application對象,當客戶再所訪問的網站的各個頁面之間瀏覽時,這個Application對象都是同一個,直到伺服器關閉。但是與Session對象不同的時,所有客戶的Application對象都時同一個,即所有客戶共用這個內建的Application對象。

setAttribute(String key,Object obj):將參數Object指定的對象obj添加到Application對象中,並為添加的對象指定一個索引關鍵字。

getAttribute(String key):擷取Application對象中含有關鍵字的對象。

5、out 對象javax.servlet.jsp.jspWriter

out 對象用於在Web瀏覽器內輸出資訊,並且管理應用伺服器上的輸出緩衝區。在使用 out 對象輸出資料時,可以對資料緩衝區進行操作,及時清除緩衝區中的殘餘資料,為其他的輸出讓出緩衝空間。待資料輸出完畢後,要及時關閉輸出資料流。

Out對象時一個輸出資料流,用來向用戶端輸出資料。Out對象用於各種資料的輸出。其常用方法如下。

out.print():輸出各種類型資料。

 out.newLine():輸出一個分行符號。

 out.close():關閉流。

6、pageContext 對象javax.servlet.jsp.PageContext

pageContext 對象的作用是取得任何範圍的參數,通過它可以擷取 JSP頁面的out、request、reponse、session、application 等對象。

pageContext對象的建立和初始化都是由容器來完成的,在JSP頁面中可以直接使用 pageContext對象。

page 對象代表JSP本身,只有在JSP頁面內才是合法的。 page隱含對象本質上包含當前 Servlet介面引用的變數,類似於Java編程中的 this 指標。

7、config 對象javax.servlet.ServletConfig

config 對象的主要作用是取得伺服器的配置資訊。通過 pageConext對象的 getServletConfig() 方法可以擷取一個config對象。當一個Servlet 初始化時,容器把某些資訊通過 config對象傳遞給這個 Servlet。開發人員可以在web.xml 檔案中為應用程式環境中的Servlet程式和JSP頁面提供初始化參數。

8 cookie 對象

Cookie是Web伺服器儲存在使用者硬碟上的一段文本。Cookie允許一個Web網站在使用者電腦上儲存資訊並且隨後再取回它。舉例來說,一個Web網站可能會為每一個訪問者產生一個唯一的ID,然後以Cookie檔案的形式儲存在每個使用者的機器上。

建立一個Cookie對象 調用Cookie對象的建構函式就可以建立Cookie對象。Cookie對象的建構函式有兩個字串參數:Cookie名字和Cookie值。 

例如:Cookie c = new Cookie(username",john"); 將Cookie對象傳送到用戶端。

JSP中,如果要將封裝好的Cookie對象傳送到用戶端,可使用Response對象的addCookie()方法。 

例如:response.addCookie(c),讀取儲存到用戶端的Cookie。

 使用Request對象的getCookie()方法,執行時將所有用戶端傳來的Cookie對象以數組的形式排列,如果要取出符合需要的Cookie對象,就需要迴圈比較數組內每個對象的關鍵字。設定Cookie對象的有效時間,用Cookie對象的setMaxAge()方法便可以設定Cookie對象的有效時間,

例如:Cookie c = newCookie(username","john");c.setMaxAge(3600);

Cookie對象的典型應用時用來統計網站的訪問人數。由於Proxy 伺服器、緩衝等的使用,唯一能協助網站精確統計來訪人數的方法就是為每個訪問者建立一個唯一ID。使用Cookie,網站可以完成以下工作:

 測定多少人訪問過。測定訪問者有多少是新使用者(即第一次來訪),多少是老使用者。

測定一個使用者多久訪問一次網站。當一個使用者第一次訪問時,網站在資料庫中建立一個新的ID,並把ID通過Cookie傳送給使用者。使用者再次來訪時,網站把該使用者ID對應的計數器加1,得到使用者的來訪次數。

9、exception 對象java.lang.Throwable

exception 對象的作用是顯示異常資訊,只有在包含 isErrorPage="true" 的頁面中才可以被使用,在一般的JSP頁面中使用該對象將無法編譯JSP檔案。

excepation對象和Java的所有對象一樣,都具有系統提供的繼承 結構。

exception 對象幾乎定義了所有異常情況。在Java程式中,可以使用try/catch關鍵字來處理異常情況; 如果在JSP頁面中出現沒有捕獲到的異常,就會產生 exception 對象,並把 exception 對象傳送到在page指令中設定的錯誤頁面中,然後在錯誤頁面中處理相應的 exception 對象。

 

 

 

 

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

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

 

何為範圍

  先讓我們看看效果:

  大概流程是這樣的,我們訪問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都是完全隔離的,無論如何修改都不會影響其他人的資料。

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.