面試題:jsp九大內置對象
我們常說的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() ----該方法以字符串的形式返回一個對異常的描述。
面試題:jsp九大內置對象