1. 簡介
JSP內置對象是Web容器創建的一組對象,不使用new關鍵字就可以使用的內置對象。
2. JSP九大內置對象
out、request、response、session、application是比較常用的,還有page、pageContext、exception和config對象。
3. out對象
out對象是JspWriter類的實例,是向客戶端輸出內容常用的對象。
常用方法:
(1). void println():向客戶端打印字符串
(2). void clear():清除緩衝區的內容,如果在flush之後調用會拋出異常,後面代碼不會執行
(3). void clearBuffer():清除緩衝區的內容,如果在flush之後調用不會拋出異常,後面代碼會繼續執行
(4). void flush():將緩衝區內容輸出到客戶端
(5). int getBufferSize():返回緩衝區以字節數的大小,如不設緩衝區則爲0
(6). int getRemaining():返回緩衝區剩餘多少可用
(7). boolean isAutoFlush():返回緩衝區滿時,是自動清空還是拋出異常
(8). void close():關閉輸出流
4. request對象
客戶端的請求信息被封裝在request對象中,通過它才能瞭解到客戶的需求,然後做出相應。它是HttpServletRequest類的實例。request對象具有請求域,即完成客戶端的請求之前,該對象一直有效。
常用方法:
String getParameter(String name):返回name指定參數的參數值
String[] getParameterValues(String name):返回包含參數name的所有值的數組
void setAttribute(String, Object):存儲次請求中的屬性
Object getAttribute(String name):返回指定屬性的屬性值
String getContentType():得到請求體的MIME類型
String getProtocol():返回請求用的協議類型及版本號
String getServerName():返回接受請求的服務器主機名
int getServerPort():返回服務器接受此請求所用的端口號
String getCharacterEncoding():返回字符編碼方式
void setCharacterEncoding():設置請求的字符編碼方式
int getContentLength():返回請求體的長度(以字節數)
String getRemoteAddr():返回發送次請求的客戶端IP地址
String getRealPath(String path):返回一虛擬路徑的真實路徑
String getContextPath():返回上下文路徑
解決表單post提交中文亂碼問題:
request.setCharacterEncoding("utf-8");
解決URL傳參中文亂碼問題:
修改tomcat目錄下conf\server.xml中<connector>標籤,添加 URIEncoding="utf-8"
5. response對象
response對象包含了響應客戶端請求的有關信息,但在JSP中很少直接用到它。它是HttpServletResponse類的實例。response對象具有頁面作用域,即訪問一個頁面時,該頁面的response對象只能對這次訪問有效,其它頁面的response對象對當前頁面無效。
常用方法:
String getCharacterEncoding():返回響應用的是何種字符編碼
void setContentType(String type):設置響應的MIME類型
PrintWriter getWriter():返回可以向客戶端輸出字符的一個對象(注意比較:PrintWriter與內置out對象的區別)
sendRedirect(java.lang.String location):重新定向客戶端的請求
注意:
response.getWriter()獲取的PrintWriter的輸出總是在內置out對象之前。內置out執行out.flush()輸出全部緩衝區內容,這樣就可以在後面的輸出之前了。
請求轉發與請求重定向區別:
請求重定向:
客戶端行爲,response.sendRedirect(),從本質上講等同於兩次請求,前一次的請求對象不會保存,地址欄的URL地址會改變。
請求轉發:
服務器行爲,request.getRequestDispatcher().forward(req, resp),是一次請求,轉發後請求對象會保存,地址欄的URL地址不會改變。
6. session
session表示客戶端與服務器的一次會話,Web中的session指的是用戶在瀏覽某個網站時,從進入網站到瀏覽器關閉所經過的這段時間,也就是用戶瀏覽這個網站所花費的時間,session實際上是一個特定的時間概念。
在服務器的內存中保存着不同用戶的session。
從一個客戶打開瀏覽器並連接到服務器開始,到客戶關閉瀏覽器離開這個服務器結束,被稱爲一個會話。
當一個客戶訪問一個服務器時,可能會在服務器的幾個頁面直接切換,服務器應當通過某種辦法知道這是同一個客戶,就需要session對象。
session對象是HttpSession類的實例。
常用方法:
long getCreationTime():返回session創建時間
public String getId():返回session創建時JSP引擎爲它設的唯一ID號(32位)
public Object setAttribute(String name, Object value):使用指定名稱將對象綁定到此會話
public Object getAttribute(String name):返回與此會話中的指定名稱綁定在一起的對象,如果沒有對象綁定在該名稱下,則返回null
String[] getValueNames():返回一個包含此session中所有可用屬性的數組
int getMaxInactiveInterval():返回兩次請求間隔多長時間此session被取消(單位:秒)
session的生命週期:
(1). 創建階段
當客戶端第一次訪問某個JSP或者Servlet的時候,服務器會爲當前會話創建一個SessionId,每次客戶端向服務器發送請求時,都會將此SessionId攜帶過去,服務端會對此SessionId進行校驗。
(2). 活動階段
某次會話當中通過超鏈接打開的新頁面屬於同一次會話。只要當前會話頁面沒有全部關閉,重新打開新的瀏覽器窗口訪問同一項目資源時屬於同一次會話。除非背刺會話的所有頁面都關閉後再重新訪問某個JSP或者Servlet將會創建新的會話。
注意事項:原有會話還存在,只是這個舊的SessionId仍然存在於服務端,只不過再也沒有客戶端會攜帶它然後交予服務端校驗。
(3). 銷燬階段
三種方式:調用了session.invalidate()方法、session過期(超時)、服務器重新啓動。
Tomcat默認的session超時時間爲30分鐘。
設置session超時有兩種方式:
(1). session.setMaxInactiveInterval(時間); // 單位是秒
(2). 在web.xml配置
<session-config>
<session-timeout>10</session-timeout>
</session-config>
單位是分鐘。
7. application對象
application對象實現了用戶間數據的共享,可存放全局變量。
application開始於服務器的啓動,終止於服務器的關閉。
在用戶的前後連接或不同用戶之間的連接中,可以對application對象的同一屬性進行操作。
在任何地方對application對象屬性的操作,都將影響到其他用戶對此的訪問。
服務器的啓動和關閉決定了application對象的生命
application對象是ServletContext類的實例。
常用方法:
public void setAttribute(String name, Object value):使用指定名稱將對象綁定到此會話
public Object getAttribute(String name):返回與此會話中的指定名稱綁定在一起的對象,如果沒有對象綁定在該名稱下,則返回null
Enumeration getAttributeNames():返回所有可用屬性名的枚舉
String getServerInfo():返回JSP(Servlet)引擎名及版本號
8. page對象
page對象就是指向當前JSP頁面本身,有點像類中的this指針,它是java.lang.Object類的實例。
常用方法:
class getClass():返回此類的Object的類
int hashCode():返回此Object的hash碼
boolean equals(Object obj):判斷此Object是否與制定的Object對象相等
void copy(Object obj):把Object拷貝到指定的Object對象中
Object clone():克隆此Object對象
String toString():把此Object對象轉換成String類的對象
void notify():喚醒一個等待的線程
void notifyAll():喚醒所有等待的線程
void wait(int timeout):使一個線程處於等待直到timeout結束或被喚醒
void wait():使一個線程處於等待直到被喚醒
9. pageContext對象
pageContext對象提供了對JSP頁面所有的對象及名字空間的訪問
pageContext對象可以訪問到本頁所在的session,也可以取本頁面所在的application的某一屬性值
pageContext對象相當於頁面中所有功能的集大成者
pageContext對象的本類名也叫pageContext
常用方法:
JspWriter getOut():返回當前客戶端響應被使用的JspWriter流(out)
HttpSession getSession():返回當前頁面中的HttpSession對象(session)
Object getPage():返回當前頁面的Object對象(page)
ServletRequest getRequest():返回當前頁面的ServletRequest對象(request)
ServletResponse getResponse():返回當頁面的ServletResponse對象(response)
void setAttribute(String name, Object attribute):設置屬性及屬性值
Object getAttribute(String name, int scope):在制定範圍內取屬性的值
int getAttributeScope(String name):返回某屬性的作用範圍
void forward(String relativeUrlPath):是當前頁面重導到另一頁面(地址欄不會變化)
void include(String relativeUrlPath):在當前位置包含另一文件
10. config對象
config對象是在一個Servlet初始化時,JSP引擎向它傳遞信息用的,此信息包括Servlet初始化時所要用到的參數(通過屬性名和屬性值構成)以及服務器的有關信息(通過傳遞一個ServletContet對象)。
常用方法:
ServletContext getServletContext():返回含有服務器相關信息的ServletContext對象
String getInitParameter(String name):返回初始化參數的值
Enumeration getInitParameterNames():返回Servlet初始化所需所有參數的枚舉
11. exception對象
exception對象是一個異常對象,當一個頁面在運行過程中發生了異常,就產生這個對象。如果一個JSP頁面要應用此對象,就必須把isErrorPage設爲true,否則無法編譯。它實際上是java.lang.Throwable的對象。在需要拋異常的頁面設置好errorPage的目標,跳轉到的界面設置isErrorPage爲true。
常用方法:
String getMessage():返回描述異常的消息
String toString():返回關於異常的簡短描述消息
void printStackTrace():顯示異常及其棧軌跡
Throwable FillInStackTrace():重寫異常的執行棧軌跡