我們常說的JSP有九大內建對象分別為:request、response、session、out、pagecontext、page、exception、application、config。
我們知道,JVM只能識別java類,並不能識別JSP代碼,那麼這些對象是如何產生的的呢。這就要提到Servlet。Servlet就是用Java編寫的伺服器端程式。狹義的Servlet是指Java語言實現的一個介面,廣義的Servlet是指任何實現了這個Servlet介面的類。
JSP的本質就是Servlet,Servlet是JSP的前身,JSP是Servlet的擴充;當JSP第一次被訪問時,Web容器將JSP代碼編譯成JVM能夠識別的Java類,JSP經編譯後就變成了Servlet。(JSP與Servlet聯絡)
JSP中的內建對象都是通過HttpServletRequest對象,HttpServletResponse對象以及HttpServlet對象得到。
JSP是HTML中內嵌Java代碼,側重頁面顯示;而Servlet是HTML代碼與Java代碼分開,側重邏輯控制。(JSP與Servlet區別) 1、request對象(轉譯後對應javax.servlet.http.HttpServletRequest對象)
request對象代表了用戶端的請求資訊,主要用於接受通過HTTP協議傳送到伺服器的資料(包括頭資訊、系統資訊、請求方式以及請求參數等)。
request對象的生命週期:一次請求。
request對象的範圍:JSP頁面內有效。
request常用的方法:
1 object getAttribute(String name) ----返回指定屬性的屬性值
2 Enumeration getAttributeNames() ----返回所有可用屬性名稱的枚舉
3 String getCharacterEncoding() ----返回字元編碼方式
4 int getContentLength() ----返回請求體的長度(以位元組數)
5 String getContentType() ----得到請求體的MIME類型(多用途互連網郵件擴充類型)
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 StringgetRealPath(String path) ----返回一虛擬路徑的真實路徑
19 String request.getContextPath() ----返回上下文路徑
2、response對象 (轉譯後對應javax.servlet.http.HttpServletResponse對象)
response對象表示伺服器端對用戶端的回應。主要用於設定頭資訊、跳轉、Cookie等。
response的生命週期:一次響應。
response的範圍:只在JSP頁面內有效。
response常用方法:
public void setHeader(java.lang.String name, java.lang.String value) ----設定頭資訊的名字和內容
public void sendRedirect(java.lang.String location) throws java.io.IOException ----跳轉,由一個頁面跳往另外一個頁面
public void addCookie(Cookie cookie) ----向用戶端加入cookie
public void setContentType(java.lang.String type) ----設定內容的傳回型別
在瞭解了request與response的用法後,有一個重要的問題需要清楚,請求轉移與請求重新導向的區別:
請求重新導向:response.sendRedirect(), 用戶端行為,從本質上講等同於兩次請求,前一次的請求對象不會保持,地址欄的URL地址會改變。
請求轉寄:request.getRequsetDispatcher().forward(requset,response);伺服器行為,是一次請求,轉寄後請求對象會儲存,地址欄的URL地址不會改變。(伺服器內部轉寄,所有用戶端看不到地址欄的改變)。 3、session對象 (轉譯後對應javax.servlet.http.HttpSession對象)
session對象用於儲存特定的使用者會話所需的資訊 。
session對象生命週期:從存入資料時開始,預設閑置30分鐘後失效。
session對象範圍:會話內有效。(從一個客戶開啟瀏覽器並串連到伺服器開始,到客戶關閉瀏覽器離開這個伺服器結束,被稱為一個會話;因為http是無狀態的,Session需要使用Cookie作為識別標誌。該Cookie為伺服器自動產生的,它的maxAge屬性一般為-1,表示僅當前瀏覽器內有效,並且各瀏覽器視窗間不共用,關閉瀏覽器就會失效。)
session常用方法:
public String getId() ----擷取Session對象編號。
public void setAttribute(String key,Object obj)----將參數Object指定的對象obj添加到Session對象中,並為添加的對象指定一個索引關鍵字。
public Object getAttribute(String key) ----擷取Session對象中含有關鍵字的對象。
public Boolean isNew() ----判斷是否是一個新session
4、application對象(轉譯後對應javax.servlet.ServletContext對象)
application對象用於儲存和訪問來自任何頁面的變數,類似於 session 對象。不同之處在於,所有的使用者分享一個 Application 對象,類似於“全域變數”,而 session 對象和使用者的關係是一一對應的。
application對象生命週期:伺服器啟動發送第一個請求時就產生了Application對象,直到伺服器關閉。
application對象常用方法:
setAttribute(String key,Object obj) ----將參數Object指定的對象obj添加到Application對象中,並為添加的對象指定一個索引關鍵字。
getAttribute(String key) ----擷取Application對象中含有字的對象。
5、out 對象(轉譯後對應javax.servlet.jsp.jspWriter對象)
out 對象用於在Web瀏覽器內輸出資訊,並且管理應用伺服器上的輸出緩衝區。(注意要及時關閉輸出資料流)
其主要方法如下:
clear() ----清除緩衝區中的資料,若緩衝區已經是空的,則會產生IOException異常;
clearBuffer() ----清除緩衝區的資料,若緩衝區為空白,不會產生IO異常;
flush() -----直接將目前暫存於緩衝區的資料輸出;
getBufferSize()----返回緩衝區的大小;
getRemaining()----返回緩衝區的剩餘空間大小;
isAutoFlush() ----返回布爾值表示是否自動輸出緩衝區的資料;
輸出資料的一些方法:
newLine() ----輸出換行;
print(datatype data) ----輸出不同資料類型的資料;
println(datatype data) ----輸出不同資料類型的資料,並自動換行;
6、pageContext 對象(轉譯後對應javax.servlet.jsp.PageContext對象)
pageContext對象能夠存取其他隱含對象,如request、reponse、session、application 等對象。(實際上,pageContext對象提供了對JSP頁面所有的對象及命名空間的訪問。)
pageContex常用方法:
void setAttribute(String name, Object value, int scope)----pageContext對象存取其他隱含對象屬性的方法,此時需要指定範圍的參數:範圍參數有四個,分別代表四種範圍:PAGE_SCOPE、REQUEST_SCOPE、SESSION_SCOPE、APPLICATION_SCOPE
pageContext對象取得其他隱含對象的方法:
Exception getException( ) ----回傳網頁的異常
JspWriter getOut( ) ----回傳網頁的輸出資料流
Object getPage( ) ----回傳網頁的Servlet 實體
ServletRequest getRequest( ) ----回傳網頁的請求
ServletResponse getResponse( ) ----回傳網頁的響應
ServletConfig getServletConfig( ) ----回傳此網頁的ServletConfig 對象
ServletContext getServletContext( ) ----回傳此網頁的執行環境
HttpSession getSession( ) ----回傳和網頁有聯絡的會話
3.PageContext對象提供取得屬性的方法
Object getAttribute(String name, int scope) ----回傳name 屬性,範圍為scope的屬性對象,回傳類型為Object
Enumeration getAttributeNamesInScope(int scope) ----回傳所有屬性範圍為scope 的屬性名稱,回傳類型為Enumeration
int getAttributesScope(String name) ----回傳屬性名稱為name 的屬性範圍
void removeAttribute(String name) ----移除屬性名稱為name 的屬性對象
void removeAttribute(String name, int scope) ----移除屬性名稱為name,範圍為scope 的屬性對象
void setAttribute(String name, Object value, int scope) ----指定屬性對象的名稱為name、值為value、範圍為scope
Object findAttribute(String name) ----尋找在所有範圍中屬性名稱為name 的屬性對象
7、config 對象(轉譯後對應javax.servlet.ServletConfig對象)
config對象的主要作用是取得伺服器的配置資訊。
config對象常用方法:
getServletContext() ----返回 一個含有伺服器相關資訊的ServletContext對象。
getIntParameter(String name) ----返回初始化參數的值。
getIntParameterNames() ----返回包含了Servlet初始化所需要的所有參數,傳回型別是枚舉型
8、page對象 (轉譯後對應this)
page對象代表JSP本身,只有在JSP頁面內才是合法的。page對象有點類似於Java編程中的this指標,就是指當前JSP頁面本身。
9、exception對象(轉譯後對應java.lang.Throwable對象)
exception對象的作用是顯示異常資訊,必須在page 指令中設定< %@ page isErrorPage="true" %>才能使用,在一般的JSP頁面中使用該對象將無法編譯JSP檔案。
exception對象常用方法:
getMessage( ) ----該方法返回錯誤資訊。
printStackTrace( ) ---- 該方法以標準錯誤的形式輸出一個錯誤和錯誤的堆棧。
toString() ----該方法以字串的形式返回一個對異常的描述。