【JavaWeb】(2)JSP內置對象

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():重寫異常的執行棧軌跡


發佈了80 篇原創文章 · 獲贊 0 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章