雖然現在基本上我們都是使用SpringMVC+AJAX進行開發了Java Web了,但是還是很有必要了解一下JSP的九大內置對象的。像request、response、session這些對象,即便使用其他框架也是會經常用到的。因此十分有了解的必要。
這些對象可以在JSP頁面中調用,而不需要事先定義,這使得JSP編程更加的方便和快捷。其實這些內置對象都對應著某個Servlet類,在JSP被翻譯成Servlet之後,這些內置對象會相應轉換成對應的類實例。
內置對象特點:
1. 由JSP規范提供,不用編寫者實例化。
2. 通過Web容器實現和管理。
3. 所有JSP頁面均可使用。
4. 只有在腳本元素的表達式或代碼段中才可使用(<%=使用內置對象%>或<%使用內置對象%>)。
常用內置對象:
1. 輸出輸入對象:request對象、response對象、out對象。
2. 通信控制對象:pageContext對象、session對象、application對象。
3. Servlet對象:page對象、config對象。
4. 錯誤處理對象:exception對象。
request內置對象是最常用的對象之一,它代表的是java.servlet.HttpServletRequest類的對象。request內置對象中包含了有關浏覽器請求的信息,並提供了多個用於獲取cookie、header以及session內數據的方法。
//requeset對象是從客戶端向服務器發出的請求,可以通過這個對象了解客戶端信息。
isUserInRole(String role) :判斷認證後的用戶是否屬於邏輯的role中的成員。
getAttribute(String name) :返回由name指定的屬性值。若不存在則為空。
getAttributes():返回request對象的所有屬性的名字集合,其結果是一個枚舉的實例。
getCookies() :返回客戶端的所有Cookie對象,結果是一個Cookie數組。
getCharacterEncoding(): 返回請求中的字符編碼方式。
getContentLength() :返回請求的Body的長度,如果不確定長度,返回-1。
getHeader(String name): 獲得HTTP協議定義的文件頭信息。
getHeaders(String name): 返回指定名字的request Header的所有值,其結果是一個枚舉的。
getHeaderNames():返回所有request Header的名字 ,其結果是一個枚舉實例。
getInputStream() :返回請求的輸入流,用於獲得請求中的數據
getMethod():獲得客戶端向服務器端傳送數據的方法,如GET,POST,HEADER,TRACE等。
getParameter(String name):獲得客戶端傳送給服務器端的參數值。
getParameterNames(): 獲得客戶端傳送給服務器端的所有參數名字,其結果是一個枚舉的實例。
getParameterValues(String name): 獲得指定參數的所有值。
getProtocol():獲取客戶端向服務器端傳送數據所依據的協議名稱。
getQueryString():獲得查詢字符串,該字符串是由客戶端以GET方式向服務器端傳送的。
getRequestURI():獲取發出請求字符串的客戶端地址。
getRemoteAddr():獲取客戶端IP地址。
getRemoteHost():獲取客戶端名字 。
getSession([Boolean create]):返回和請求相關的session。create參數是可選的。當有參數create且這個參數值為true時,如果客戶端還沒有創建session,那麼將創建一個新的session。
getServerName():獲取服務器的名字。
getServletPath():獲取客戶端所請求的腳本文件的文件路徑。
getServerPort():獲取服務器的端口號。
removeAttribute(String name):刪除請求中的一個屬性。
setAttribute(String name, java.lang.Object obj):設置request的參數值。
response對象和request對象的性質相反,它所包含的是服務器向客戶端做出的應答信息.實現過程中response被包裝成HttpServletResponse接口,它包含裝了JSP產生的響應,然後被發送到客戶端以響應客戶端的請求。
addCookie(Cookie cook):添加一個Cookie對象,用來保存客戶端的用戶信息。
addHeader(String name,String value):添加HTTP文件頭信息。該Header信息將傳達到客戶端,如果已經存在同名的則會覆蓋。
containsHeader(String name):判斷指定字句的Header是否已經存在,返回真假。
encodeURL():使用sessionId封裝URL。如果沒有封裝URL則返回原值。
flushBuffer():強制把當前緩沖區的內容發送到客戶端。
getBufferSize():返回緩沖區的大小。
getOutputStream():返回到客戶端的輸出流。
sendError(int):向客戶端發送錯誤信息。如404 指網頁不存在 。
sendRedirect(String location):把響應發送到另一個位置 進行處理 即請求重定向。
setContent(String contentType):設置響應的MIME類型。
getWriter():此方法返回一個PrintWriter對象。
getCharacterEncoding():該方法獲得此時相應所采用的字符編碼類型。
setDateHeader(String name,heaername,long date):把指定的頭名稱以及日期設置為響應頭信息 其值是從新紀元算起的毫秒數。
setHeader(String name,String value):設置指定名字的HTTP文件頭的值,若存在則會覆蓋。
Session對象是一個JSP內置對象,它在第一個JSP頁面被裝載時自動創建,完成會話期管理。從一個客戶打開浏覽器並連接到服務器開始,到客戶關閉浏覽器離開這個服務器結束,被稱為一個會話。當一個客戶訪問一個服務器時,可能會在這個服務器的幾個頁面之間切換,服務器應當通過某種辦法知道這是一個客戶,就需要Session對象。
當一個客戶首次訪問服務器上的一個JSP頁面時,JSP引擎產生一個Session對象,同時分配一個String類型的ID號,JSP引擎同時將這換個ID號發送到客戶端,存放在Cookie中,這樣Session對象,直到客戶關閉浏覽器後,服務器端該客戶的Session對象才取消,並且和客戶的會話對應關系消失。當客戶重新打開浏覽器再連接到該服務器時,服務器為該客戶再創建一個新的Session對象。
session 對象是由服務器自動創建的與用戶請求相關的對象。服務器為每個用戶都生成一個session對象,用於保存該用戶的信息,跟蹤用戶的操作狀態。
session對象內部使用Map類來保存數據,因此保存數據的格式為 “Key/value”。 session對象的value可以使復雜的對象類型,而不僅僅局限於字符串類型。
getAttribute():獲取與指定名字相聯系的屬性。
getAttributeNames():session對象中存儲的每一個對象,其結果為一個枚舉的實例。
getCreateTime():返回session的創建時間,最小單位這千分之一秒。
getId():返回唯一的標識,每個session的ID是不同的。
getLastAccessedTime():返回和當前session對象相關的客戶端最後發送的請求時間。
setMaxInactiveInterval(int number):該方法設定保存session數據的時間,參數number為秒數。
getMaxInactiveInterval():返回決時間,負值表示session永遠不會過期。它的值為session的生存時間。
invalidate():銷毀這個對像。
isNew():如果客戶端不接受使用session,那麼每個請求中都會產生一個session對象。
removeAttribute(String name):刪除與指定名字相聯系的屬性。
setAttribute(String name,java.langObject obj):設置指定名字的屬性值 並將 其存儲在session中。
application 對象可將信息保存在服務器中,直到服務器關閉,否則application對象中保存的信息會在整個應用中都有效。與session對象相比,application對象生命周期更長,類似於系統的“全局變量”。
服務器啟動後就產生了這個Application對象,當客戶再所訪問的網站的各個頁面之間浏覽時,這個Application對象都是同一個,直到服務器關閉。但是與Session對象不同的時,所有客戶的Application對象都時同一個,即所有客戶共享這個內置的Application對象。
getAttribute(String name):返回指定名字的application對象的屬性的值。
getAttributeNames():返回所有應用程序級對象的屬性的名字 ,其結果為枚舉的實例。
getInitParameter(String name):返回由指定名字的application對象的某個屬性的初始值。
getServletInfo():返回Servlet編譯器的當前版本的信息。
setAttribute(String name,Object obj):設置 指定名字的application對象的屬性的值 。
removeAttribute(string Key):通過關鍵字來刪除一個對象的信息。
getRealPath(String path):返回虛擬路徑的真實路徑。
getContext(String URLPath):返回執行Web應用的application對象。
getMajorVersion():返回服務器支持的Servlet API最大版本號。
getMinorVersion():返回服務器支持的Servlet API最小版本號。
getMimeType(String file):返回指定文件的MIME類型。
getResource(String path):返回指定資源的輸入流。
getResourceDispathcher(String URLPath):返回指定資源的RequestDispathcher。
getServlet(String name):返回 指定名稱的servlet。
getServlets():返回所有的Servlet,返回類型為枚舉型。
getServletNames():返回所有的Servlet名稱,返回類型為枚舉型。
log(String msg):把指定信息寫入到Servlet的日志文件中。
log(String msg,Throwable throwable):把軌跡以及給出的Throwable異常說明信息寫入Servlet的日志文件。
out 對象用於在Web浏覽器內輸出信息,並且管理應用服務器上的輸出緩沖區。在使用 out 對象輸出數據時,可以對數據緩沖區進行操作,及時清除緩沖區中的殘余數據,為其他的輸出讓出緩沖空間。待數據輸出完畢後,要及時關閉輸出流。
Out對象時一個輸出流,用來向客戶端輸出數據。Out對象用於各種數據的輸出。
out.print()://輸出數據。
out.newLine()://輸出一個換行符。
out.flush()://輸出緩沖區裡的數據。
out.close()://關閉輸出流。
out.clearBuffer()://清除緩沖區裡的數據,並把數據輸出到客戶端。
out.clear()://清除緩沖區裡的數據,但不會把數據輸出到客戶端。
out.getBufferSize()://獲得緩沖區大小。
out.getRemaining()://獲得緩沖區中沒有被占用的空間大小。
out.isAutoFlush()://返回布爾值。如果AutoFlush為真 則返回真。
pageContext 對象的作用是取得任何范圍的參數,通過它可以獲取 JSP頁面的out、request、reponse、session、application 等對象。
pageContext對象的創建和初始化都是由容器來完成的,在JSP頁面中可以直接使用 pageContext對象。
page 對象代表JSP本身,只有在JSP頁面內才是合法的。 page隱含對象本質上包含當前 Servlet接口引用的變量,類似於Java編程中的 this 指針。
forward(String UriPath):重定向。
getAttribute(String name,[int scope] ): scope可選。用來檢索一個特定的已經 命名的對象的范圍,並且還可以通過調用 getAttributeNamesInScope()方法 ,檢索對鞭個特定范圍的每個屬性String字符串名稱的枚舉。
getException():返回當前的exception對象。
getRequest():返回當前的request對象。
getResponse():返回當前的response對象。
getServletConfig():返回當前頁面的ServletConfig對象。
getServletContext():返回ServletContext對象。這個對象對所有頁面都是共享的。
getSession():返回當前的session對象。
findAttribute():可以用來按照頁面,請求,會話以及應用程序范圍順序實現對某個已經命名的屬性的搜索。
setAttribute():可以用來設置默認頁面范圍或特定范圍之中的已命名對象。removeAttribute()可以用來刪除默認范圍或特定范圍內的已命名對象。
config 對象的主要作用是取得服務器的配置信息。通過 pageConext對象的 getServletConfig() 方法可以獲取一個config對象。當一個Servlet 初始化時,容器把某些信息通過 config對象傳遞給這個 Servlet。開發者可以在web.xml 文件中為應用程序環境中的Servlet程序和JSP頁面提供初始化參數。
getServletContext():返回執行者的Servlet上下文。
getServletName():返回Servlet的名字。
getInitParameter(String name):返回名字為name的初始參數的值。
getInitParameterNames():返回這個JSP的所有的初始參數的名字。
page對象有點類似於Java編程中的this指針,就是指當前JSP頁面本身。page是java.lang.Object類的對象。
page.getClass()://獲得page對象的類。
page.hashCode()://獲得page對象的hash碼。
page.toString()://將此page對象轉換為String類對象。
page.notify()://喚醒一個等待的進程。
page.notifyAll()://喚醒所有等待的進程。
page.wait()://使一個線程處於等待直到被喚醒。
page.wait(long timeout)://使一個線程處於等待直到timeout或被喚醒。
exception 對象的作用是顯示異常信息,只有在包含 isErrorPage="true" 的頁面中才可以被使用,在一般的JSP頁面中使用該對象將無法編譯JSP文件。
excepation對象和Java的所有對象一樣,都具有系統提供的繼承 結構。
exception 對象幾乎定義了所有異常情況。在Java程序中,可以使用try/catch關鍵字來處理異常情況; 如果在JSP頁面中出現沒有捕獲到的異常,就會生成 exception 對象,並把 exception 對象傳送到在page指令中設定的錯誤頁面中,然後在錯誤頁面中處理相應的 exception 對象。
exception對象只有在錯誤頁面(在頁面指令裡有isErrorPage=true的頁面)才可以使用。
getMessage()://獲取異常消息字符串。
getLocalizeMessage()://獲取本地化語言的異常錯誤。
printStackTrace()://顯示異常的棧跟蹤軌跡。
toString()://返回關於異常錯誤的簡單消息描述。
fillInStackTrace()://重寫異常錯誤的棧執行軌跡。