JSP基於Java語言,物件導向也是它的一大特色.JSP中包含大量的內建對象和可擴充的組件對象.可以說,對象是JSP編程技術的精髓.在這一章中,我們將介紹JSP中的對象,重點講述JSP的內建對象,說明它們的功能,並通過樣本來介紹它們的使用方法.
掌握JSP的內建對象的用法,基本掌握JSP的開發技巧
要求
能靈活應用JSP的內建對象來開發程式
技能
介紹JSP的內建對象
理論
3.1 對象與內建對象
對象是典型的具有方法,屬性和集合的事物
對象的屬性反映了對象的狀態,可以讀取或設定.對象的集合是由很多不同的與對象有關係的屬性和值的配對組成的.
對於一般的對象,要想使用它,必須先聲明一個類,再將它執行個體化,就會得到一個可以使用的對象.
下面我們通過一個例子來講解一般對象的使用方法.
檔案useobject.jsp _____
JSP程式中8個預設的內建對象
對於它們而言,不用聲明就可以直接使用.這8個對象分別是request,response,pageContext,session,application,out,config和page.
page
實現處理本頁當前請求的類的執行個體
java.1ang.Object
page
page
本 JSP 的 ServletConfig
javax.servlet.ServletConfig
config
page
向輸出資料流寫入內容的對象
Javax.servlet.jsp.JspWriter
out
application
從 servlet 設定物件獲得的 servlet 上下文(如在 getServletConfig() ,getContext()的調用中)
Javax.servlet.ServletContext
application
session
為請求的客戶建立的session對象
Javax.servlet.http.HttpSession
session
page
本 JSP 的頁面上下文
Javax.servlet.jsp.PageContext
pageContext
page
對請求的應答
依賴協議的java.servlet.ServletResponse 子類(例如,javax.servlet.HttpServletResponse)
response
request
觸發服務調用的請求
依 ??協議的java.servlet.ServletRequest 子類(例如,javax.servlet.HttpServletRequest)
Request
範圍
代表內容
類型
內建對象
3.2 request對象
request對象是ServletRequest的一個執行個體.當用戶端請求一個JSP網頁時,JSP引擎會將用戶端的請求資訊封裝在這個request對象中,請求資訊的內容包括請求的標題頭(Header),資訊(如瀏覽器的版本資訊,語言和編碼方式等),請求的方式(如HTTP方法:GET,POST,PUT等),請求的參數名稱,參數值和用戶端的主機名稱等,然後將request對象當作jspService方法的HttpServletRequest參數值,所以我們可以通過這個對象來取得有關用戶端的請求資訊.
3.2.1 request對象的方法
方法
返回接收請求的連接埠
getServerPort
返回接收請求的伺服器的主機名稱
getServerName
返回傳出請求的 URL 的機制
getScheme
返回傳送請求的介面程式的完整主機名稱
getRemoteHost
返回傳送請求的介面程式的 IP 位址
getRemoteAddr
返回運用替換規則從虛擬位址中獲得的實際地址
getRealPath
返回從請求體中讀取的文本的快取資料
getReader
返回請求的協議和版本號碼
getProtocol
返回作為字串列舉的指定參數的值
getParameterValues
返回本次請求的參數名字
getParameterName
返回包含指定參數的單獨值的字串
getParameter
返回在請求體中讀取位元據的輸入資料流
getlnputStream
返回請求實體資料的 InternetMedia 類型
getContenType
返回請求實體資料的大小
getContentLength
返回為請求的輸入進行編碼的字元集合
getCharacterEncoding
返回請求的給出名字的屬性的值
getAttribute
描述
方法
request對象使用樣本
1. request對象擷取伺服器及用戶端的資訊
檔案 request1.jsp
2. 用request對象來擷取和處理表單傳過來的參數值
(1) 建立HTML表單
(2) 使用GET和POST方法
(3) 用request對象處理
使用者輸入的資料用來存放在request對象裡,用javax.servlet.HttpServletRequest來執行,你可以在JSP代碼中直接存取request對象.並且處理表單傳送過來的資料.
檔案 request3.htm request3.jsp
3. 用request對象來擷取和處理表單傳過來的中文參數值的處理
檔案 request2.htm request2.jsp
3.3 response對象
response對象的類型是javax.servlet.ServletResponse類的執行個體,JSP引擎會根據用戶端的請求資訊建立一個預設的response對象.它用於將瀏覽器參考資訊,如回應的Header,回應本體(HTML的內容)以及伺服器端的狀態代碼等資訊提供給用戶端.
3.3.1 response對象的方法
重新導向用戶端的地址
sendRedirect
設定指定名字的HTTP檔案頭的值
setHeader
向用戶端發送錯誤資訊
sendError
判斷指定的HTTP檔案頭是否存在
containsHeader
添加HTTP檔案頭(Header),將會傳送到用戶端
addHeader
添加一個Cookie對象,用來儲存用戶端的使用者資訊
addCookie
為應答設定內容類型
setContentType
為應答設定內容長度
setContentLength
返回用于格式化文本應答的列印程式
getWriter
返回用於書寫二進位應答資料的輸出資料流
getCharacterEncoding
返回用於MIME編碼的字元集合
getCharacterEncoding
3.3.2 response對象使用樣本
下面的樣本程式實現了定時重新整理頁面的功能
檔案refresh.jsp
這個程式指定頁面每隔5秒鐘自動重新整理一遍,伺服器重新執行這個程式,產生新的目前時間,然後輸出到用戶端.所以,頁面上顯示的時間每隔5秒鐘就增加5秒鐘,實現了類似時鐘的功能.
下面的樣本程式實現了頁面重新導向功能
檔案request2.htm
輸入使用者名稱為admin,進入管理介面;否則,則進入普通使用者介面.
3.4 session對象
session對象是JSP中一個很重要的內部對象,我們使用它來儲存某個特定用戶端(訪問者)一次訪問的一些特定資訊.
在JSP網路編程中,有多種方法可以儲存客戶資訊,但是最常用,最實用的還是session對象.
3.4.1 session對象介紹
session對象,實際上就是伺服器與用戶端之間的"會話"
(1) session可以用來儲存訪問者的一些特定資訊.主機伺服器就是根據session來跟蹤這些資訊的.
(2) session可以建立訪問者資訊容器.
(3) session可以用來跟蹤訪問者的訪問路徑,從中挖掘有用的資訊,如訪問者的興趣愛好,訪問目的.
使用者在Web應用程式中訪問同一頁面時,session變數始終存在,當使用者在應用程式的頁之間跳轉時,儲存在session對象中的變數也不會清除,當然也可以使用session方法顯式地結束一個會話和設定空閑會話的逾時期限.
session在JSP程式中是一個內建的對象
每一個用戶端都有一個session對象用來存放於這個用戶端相關的資料.
在JSP的程式中,通常不用任何代碼,就可以直接使用session對象.不過為了確認,可以加入以下代碼,以表示需要啟動session功能.
如果設定上述的session值為false,則說明禁用session功能.
session對象的類為HttpSession,它提供了很多使用的方法.
3.4.2 session對象的方法
session對象的類是HttpSession.HttpSession由伺服器的程式實現,提供HTTP伺服器和HTTP用戶端之間的會話.會話,就是在給定時間段內持續進行多路串連和請求.會話被用來在多頁面請求中保持狀態和使用者認證.
session對象的常用方法
移去和會話應用程式層資料中指定名字相連的對象
removeValue
將指定的對象和使用指定名字的會話應用程式層資料相連
putValue
檢查是否用戶端參加了會話
isNew
使會話無效,並將其從上下文中移出
invalidate
返回和會話相連的應用程式層資料對象的名字
getValueNames
返回和應用程式層資料中指定名字相聯絡的對象
getValue
返回會話相連的上下文
getSessionContext
返回用戶端上一次發送攜帶會話帳號的時間
getLastAccessTime
返回工作階段識別項
getId
返回會話建立的時間
getCreationTime
3.4.3 session對象使用樣本
為說明session對象的具體應用,以用三個頁面類比一個多頁面的Web應用為例
(1) 第一個頁面(q1.html)僅包含一個要求輸入使用者名稱字的HTML表單 .
檔案q1.htm
(2)第二個頁面是一個JSP頁面(q2.jsp),它通過request對象提取q1.html表單中的thename值,將它儲存為name變數,然後將這個name值儲存到session對象中.q2.jsp的另外一個任務是詢問第二個問題.
(3) 第三個頁面也是一個JSP頁面(q3.jsp),主要任務是顯示問答結果,另外一個任務是提取在第二個頁面中的使用者輸入並顯示它.
通常會話管理是通過伺服器將SessionID作為一個cookie儲存在使用者的Web瀏覽器中來唯一標識每個使用者會話
如果瀏覽器不支援cookie,或者將瀏覽器設定為不接受cookie,我們可通過URL重寫來實現會話管理.
檔案hello1.jsp
使用session對象在3個不同的JSP檔案中儲存資訊
檔案example0.htm(在accountBalance中必須輸入數字)
3.5 application對象
application對象儲存了一個應用系統中一些公用的資料.與session對象相比,application對象是所有客戶共用的,而session對象則是每個客戶專用的.application對象可以是javax.servlet.ServletContext類型的.ServletContext介面讓servlet訪問關於其環境的資訊.application對象的範圍是application.
3.5.1 application對象的方法
方法
設定某個application對象的某個屬性值
setAttribute
獲得目前的版本的Servlet編譯器的資訊
getServerInfo
返回application某個屬性的值
getInitParameter
以Enumeration資料形式返回所有application對象的屬性名稱
getAttributeNames
以Object對象的形式返回對應名稱的application對象的屬性值
getAttribute
含義
對象
3.5.2 application對象的使用樣本
一個使用了application對象的計數器
檔案 appcount.jsp
應用application內建對象,將上面的session例子改為application的例子.
檔案 application1.htm
3.6 out對象
out對象用於輸出資料,它可以是javax.servlet.jsp.JspWriter的一個執行個體.out對象的範圍是page.
從java.io.Writer拓展而來的公用抽象類別JspWriter效仿了java.io.BufferedWriter和java.Io.PrintWriter中的某些功能.但是,不同之處在於它會在列印方法中拋出(throw) java.Io.IOException異常,而PrintWriter不這樣做.
JSP中的out對象就是這種類型的.如果page指令選擇了autoflush="true",那麼當出現由於當前的操作不清空緩衝而造成緩衝區溢位的情況時,這個類的所有I/O操作會自動清空緩衝區的內容.如果autoflush="false",那麼當操作造成了緩衝區溢位時,這個類的所有的I/O操作將拋出一個IOException.
3.6.1 out對象的變數
autoFlush
類型為protected boolean autoflush
如果變數值為真,則噹噹前的操作造成緩衝區溢位時,緩衝區會被清空.
如果變數值為假,則如果當前操作造成緩衝區溢位就會拋出一個IOException.
bufferSize
類型為protectedintbufferSize
表示緩衝區目前的大小.初始值根據不同的裝置而不同,但是不少於8KB.
DEFAULT_BUFFER
類型為publicstaticfinalintDEFAULT_BUFFER
表示Writer正使用的預設的緩衝區大小設定.
No_BUFFER
類型為Public static final int NO_BUFFER
表示Writer是否處於緩衝輸出狀態.
3.6.2 Out對象的方法
方法
列印一個對象
Object
print
列印一個長整數
long
print
列印一個整數
int
print
列印一個浮點數
float
print
列印一個雙精確度浮點數
double
print
列印一個字元數組
char[]
print
列印一個字元
char
print
列印一個布爾值
boolean
print
寫一行分隔字元
_
newLine
獲得autoFlush的當前值
_
isAutoFlush
獲得緩衝區中未使用的位元組數
_
getRemaining
獲得緩衝區的大小
_
getBufferSize
清除緩衝區的流
_
clearBuffer
Clear 清除緩衝區內容
_
Clear
輸出資料流
_
flush
關閉流,並輸出
_
Close
描述
參數
方法
列印一個字串,然後結束行
String
println
列印一個對象,然後結束行
Object
println
列印一個長整數,然後結束行
long
println
列印一個整數,然後結束行
int
println
列印一個浮點數,然後結束行
float
println
列印一個雙精確度浮點數,然後結束行
double
println
列印一個字元數組,然後結束行
char[]
println
列印一個字元,然後結束行
char
prinfln
列印一個布爾值,然後結束行
boolean
println
通過寫一個行分隔字元來結束當前行
_
println
列印一個字串
String
print
3.6.3 Out對象的使用樣本
用out對象輸出多種不同類型的資料,包括輸出中文
檔案out.jsp
3.7 其他對象
pageContext對象
pageContext對象是javax.servlet.jsp.PageContext類的一個執行個體.pageContext對象提供了存取所有關於JSP程式執行時所需要用到的屬性和方法,如session,application,config,out等對象屬性.對於pageContext對象,它的範圍是page.
page對象
page對象是java.lang.Object類型的,它是處理當前請求的JSP頁的實作類別的執行個體.page對象在頁的本文中可以被看作"this"的同義字.page對象的範圍是page.
config對象
config對象是javax.servlet.ServletConfig類型的.它提供存取servlet class初始參數及有關Server環境資訊的ServletContext對象.config對象的範圍是page.