教學材料《JSP設計與開發》-第4章 JSP內置對象_第1頁
教學材料《JSP設計與開發》-第4章 JSP內置對象_第2頁
教學材料《JSP設計與開發》-第4章 JSP內置對象_第3頁
教學材料《JSP設計與開發》-第4章 JSP內置對象_第4頁
教學材料《JSP設計與開發》-第4章 JSP內置對象_第5頁
已閱讀5頁,還剩34頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1第4章JSP內置對象學習要點內置對象概述out對象request對象response對象)session對象application對象cookie對象其他內置對象2

4.1內置對象概述

JSP根據ServletAPI而提供了某些隱含對象。可以使用標準的變量來訪問這些對象,并且不用編寫任何額外的代碼,就可以在JSP中自動使用到它。在JSP頁面中可以獲得的主要的7個隱含對象變量為:out對象:功能是把信息回送到客戶端的瀏覽器中。response對象:功能是處理服務器端對客戶端的一些響應。request對象:功能是用來得到客戶端的信息。application對象:用來保存網站的一些全局變量。session對象:用來保存單個用戶訪問時的一些信息。cookie對象:將服務器端的一些信息寫到客戶端的瀏覽器中。pageContext對象:提供了訪問和放置頁面中共享數據的方式。34.2out對象

——4.2.1out對象概述out對象是javax.servlet.jsp.JspWriter類的一個子類的對象,它的作用是把信息回送到客戶端的瀏覽器中。在out對象中,最常用的方法就是print()和println()。在使用print()或println()方法時,由于客戶端是瀏覽器,因此向客戶端輸出時,可以使用HTML中的一些標記,例如:“out.println(”<h1>Hello,JSP</h1>“);”。其他一些常用的方法是:out.write功能和out.print相同,newLine()的功能是輸出一個換行符,out.flush()的功能是輸出緩沖的內容。out.close()的功能是關閉輸出流(out常用的方法詳見表4-1)。out對象的生命周期是當前頁面。因此對于每一個JSP頁面,都有一個out對象。4方法說明Print(輸出對象)顯示Println(輸出對象)顯示并換行Newline()輸出換行符Flush()輸出緩沖區的內容Close()關閉流Clear()清除緩沖區isAutoFlush()返回緩沖區是否自動清除isBuffersize()返回緩沖區大小getRemaining()返回緩沖區未使用區域大小

表4-1JspWriter常用的方法54.2.2案例一:out對象應用示例

【案例功能】向客戶端輸出“Hello”【案例目標】掌握out對象的基本功能【案例要點】out對象幾種輸出方法比較【案例步驟】(1)編寫out.jsp源代碼文件。(2)啟動Tomcat服務器后,運行結果如圖4-1所示。64.3request對象

——4.3.1request對象概述request對象是javax.servlet.HttpServletRequest子類的對象,當客戶端請求一個JSP頁面時,JSP容器會將客戶端的請求信息包裝在這個request對象中。請求信息的內容包括請求的頭信息(Header)、系統信息(比如:編碼方式)、請求的方式(比如:GET或POST)、請求的參數名稱和參數值等信息。通常我們用得最多的就是客戶端請求的參數名稱和參數值信息。得到某參數值的語法為:“request.getParameter(”param1“);也可以通過request對象的getParameterNames()方法得到客戶端傳遞過來的所有參數名字,如:Enumerationparams=request.getParameterNames()。74.3.2案例二:request對象取表單數據(一)【案例功能】向客戶端輸出從表單中取出的數據【案例目標】掌握request對象取表單數據【案例要點】表單中數據的提交和JSP程序中的提取【案例步驟】(1)編寫tijiao.html源代碼文件。

(2)編寫tijiao.jsp源代碼文件。(3)啟動Tomcat服務器后,運行結果如圖4-2和4-3所示。8【案例功能】向客戶端輸出從表單中取出的數據【案例目標】掌握request對象取表單數據【案例要點】表單中控件類型的多樣性【案例步驟】(1)編寫input.htm源代碼文件。(2)編寫handle.jsp源代碼文件。(3)啟動Tomcat服務器后,運行結果如圖4-4和4-5所示。4.3.3案例三:request對象取表單數據(二)9一個HTTP請求中包含一個請求行、主機頭和上載信息,上載表單中的信息是用getParameter方法來獲取的,此外,request還提供了很多方法獲取由HTTP請求傳送來的客戶端信息。常用的方法見表4-2。(詳見教材)4.3.4request對象的常用方法104.3.5案例四:request對象的常用方法【案例功能】用request對象得到客戶的信息【案例目標】掌握request對象的常用方法【案例要點】多種方法之間的區別和各自的應用【案例步驟】(1)編寫method.jsp源代碼文件(2)啟動Tomcat服務器后,運行結果如圖4-6所示。114.3.6漢字編碼

當利用request.getParameter得到Form中元素的時候,默認的情況字符編碼為ISO-8859-1,這種編碼不能正確的顯示漢字。目前有兩種解決方法,一種是在執行操作之前,設置request的編碼格式,語法是:“request.setCharacterEncoding("GBK")”;另一種方法是轉換字符編碼:<%Stringstr=request.getParameter("boy");byteb[]=str.getBytes("ISO-8859-1");str=newString(b);%>其中b是我們用到的一個中間數組,我們表單中元素名為boy,取得的字符串存放在str中,str能正確的顯示漢字。124.4response對象

——4.4.1response對象概述response對象是一個javax.servlet.http.HttpServletResponse類的子類的對象,它的作用與request對象正好相反,它封裝執行JSP程序產生的響應,并被發送到客戶端,response對象可以使用由其父類ServletResponse所提供的方法,常用的方法見表4-3。(詳見教材)134.4.2網頁重定向sendRedirect方法可以將客戶端瀏覽器重定向到新的Web頁面,使用sendRedirect方法可以根據用戶的不同情況而定位到不同的頁面上去,重定向語句之后的代碼將不再執行,例如,下面語句就是停止當前網頁執行,轉向執行程序文件example.jsp:response.sendRedirect(“example.jsp”);在前面介紹過<jsp:forword>也可以重定向到另一個頁面,但兩種操作有如下區別:14(1)當使用<jsp:forword>操作重定向到另一個頁面,可以通過<jsp:param>傳遞參數到新的網頁,新的網頁使用request對象的getParameter()方法可以讀取參數的值,而使用response的sendRedirect()方法不需要直接編碼URL,就可以實現傳遞參數。例如下面語句在重定向時傳遞了一個名為p值為234的參數,同樣使用request對象訪問參數p。

Response.sendRedirect(“example.jsp?p=234”);(2)當使用<jsp:forword>操作,兩個頁面之間可以通過request對象分享數據,而response對象的sendRedirect()方法不支持這種數據共享。154.4.3案例五:網頁重定向【案例功能】重定向操作,傳遞參數并輸出相應的結果【案例目標】掌握response對象的sendRedirect()方法【案例要點】response的sendRedirect()方法和<jsp:forword>操作的區別【案例步驟】(1)編寫sendRedirectFrom.jsp源代碼文件。(2)編寫sendRedirectTo.jsp源代碼文件。(3)啟動Tomcat服務器后,運行sendRedirectFrom.jsp結果如圖4-7所示。16(4)選擇默認選項,提交后運行結果如圖4-8所示。(5)改變單選按鈕選項,如圖4-9所示(6)提交后運行結果如圖4-10所示。174.4.4設置ContentType屬性page指令只能靜態地設置ContentType屬性,用來決定相應的MIME值,使用response對象可以在程序中根據不同的需要動態地設置ContentType屬性。客戶端瀏覽器所支持的MIME類型可以在文件夾的文件類型中找到,常見的幾種MIME類型如表4-4所示。(詳見教材)184.4.5案例六:動態設置ContentType屬性【案例功能】動態設置頁面的顯示形式【案例目標】掌握response對象的setContentType方法【案例要點】頁面的各種ContentType屬性【案例步驟】(1)編寫setContentType.jsp源代碼文件。(2)跟程序文件同一目錄下,定義data.txt的內容如下:

54566735 67901233 54937823 8737614819(3)啟動Tomcat服務器后,運行setContentType.jsp結果如圖4-11所示。204.5session對象很多商務網站必須能夠在用戶訪問的過程中記住用戶,為用戶提供個性化服務,例如在商城購物,站點必須允許顧客同時購買多個商品,反復在不同的位置挑選后,再一次性付款,在顧客購物的過程中,網站需要記錄顧客的個人信息和已選購的商品。這就需要會話級變量,記錄用戶在一段時間內的邏輯上相關聯的不同請求。214.5.1會話和會話idHTTP協議是一個無狀態協議,一個請求完成后,客戶端與服務器端的連接是關閉的,所以一個請求與另一個請求之間是沒有關聯的。一個客戶在訪問一個服務器時,可能會在同一個應用程序的多個頁面之間反復連接,或刷新同一個頁面,服務器端不能自動判斷這一個請求和另一個請求是不是屬于同一個客戶,所以在應用程序中需要創建會話(session)記錄,記錄一個客戶的有關連接信息。從一個客戶打開瀏覽器并連接到服務器開始,一直到這個客戶關閉瀏覽器視為一個會話。JSP提供了內置對象session幫助服務器識別一個客戶的連接。當一個客戶通過瀏覽器與服務器建立連接發出第一次請求時,服務器會為這個客戶分配一個session對象,并為這個session對象分配了一個String類型的id號,JSP引擎在響應客戶請示的同時將這個id號發往客戶端,并寫入客戶端的cookie中,這樣服務器就可以通過不同的會話id識別一個客戶,通過session對象創建會話級變量,就可以跨網頁分享數據的目的。服務器為每一個客戶線程分配不同的session對象,也就是說每一個客戶擁有自己獨立的session對象,當客戶在一個服務器中的不同JSP頁面之間反復連接,或者連接到其他服務器后,再返回到該服務器,這個服務器都不會重新分配session對象,直到一次會話結束,服務器分配給客戶的session對象才會被注銷,當然不同服務器分配的session對象是不同的。22【案例功能】顯示客戶端訪問服務器時所擁有的會話id【案例目標】理解什么是一次會話【案例要點】掌握會話的含義【案例步驟】(1)編寫sessionId.jsp源代碼文件。(2)編寫sessionId_1.jsp源代碼文件。(3)編寫sessionId_2.jsp源代碼文件。4.5.2案例七:會話id23(4)啟動Tomcat服務器后,運行結果如圖4-12所示。244.5.3session對象的常用方法session對象是javax.servlet.http.HttpSession類的一個實例,HttpSession類中常用方法如表4-5所示。(詳見教材)254.5.4會話的結束由于WWW聯機的特性,所以很難確定使用者何時完成JSP的執行,且不再聯機,如果不定時地清除舊會話,服務器的存儲空間將被耗盡。一般在服務器默認設置了一個30分鐘的會話超期時間,讓客戶停止活動后session對象自動失效。設置會話超時周期可以在程序中使用session對象的setMaxInactiveInterval()方法,也可以使用web.xml文件在tomcat上部署,可以在默認的web.xml文件中找到session的設置如下,使用<session-timeout>標簽設置了30分鐘的會話的超時周期。26<!--====================DefaultSessionConfiguration=================--><!--Youcansetthedefaultsessiontimeout(inminutes)forallnewly--><!--createdsessionsbymodifyingthevaluebelow.--><session-config><session-timeout>30</session-timeout></session-config>當然當會話不需要時,還可以使用session對象的invalidate()方法直接關閉一個會話。274.6application對象網絡程序是個分布式程序,很多用戶在不同的地方執行并操作同一個程序,這時程序要能夠實時地反映各種改變。例如,在一個聊天室程序中,一個聊天室的在線用戶名單、用戶在聊天室的發言對于每一個用戶都是相同的,而且能夠實時更新,這些信息為所有網絡用戶所共享。又例如,在一些網站的首頁都有一個計數器,記錄訪問過網站的人數,這個計數變量同樣是為所有用戶所共享的。284.6.1application對象簡介不同于session對象,application對象是以服務器為主角,服務器的啟動和關閉決定了application的生命周期。服務器啟動一個服務,然后創建此服務下的Web應用程序,同時為此Web應用程序新建application對象,它將一直存在,直到服務器關閉,所以application對象開始于任一個JSP網頁被開始執行時,終止于服務器的關閉。當一個用戶在客戶端訪問JSP頁面時,JSP引擎會為該用戶啟動一個線程,分配這個application對象,每一個應用程序的所有線程將共享這個application對象,也就是說,所有的用戶將共享這個application對象。294.6.2application對象的常用方法application是javax.servlet.ServletContext類的一個實例,它可以使用類ServletContext中的方法,常用方法如表4-6所示(詳見教材)setAttribute方法該方法是為應用程序級變量賦值,若在application對象中還不存在這個變量,會添加這個變量。例如為應用程序級變量maxnum賦值為25。application.setAttribute(“maxnum”,25);getAttribute方法該方法是獲取application對象中某個應用程序級變量的值。該方法返回一個Object類型的數據,使用時要根據應用程序級變量的數據類型進行轉換。例如,讀取maxnum值的語句為:

Integernum=(Integer)application.getAttribute(“maxnum”);30應用程序級變量只能是一個對象,而不能是基本數據類型變量如int、double。基本數據類型的變量要首先轉換成對應的類,如int轉換成Integer。如果對Java不熟悉,也可以先將數字轉換成字符串,再保存到application對象,當從application對象中取得數據時,再轉換成數值。下面的語句中,第一句表示將把num變量(類型為整型)轉換為字符串,再保存進application對象;第二句表示把從application對象中取得數據再轉換成整數。例如:

application.setAttribute(“num”,String.valueOf(num1));intnum2=Integer.parseInt(application.getAttribute(“num”.toString()));由于application對象是為所有用戶所共享的,所以操作應用程序級變量時,要考慮同步處理。314.6.3案例八:網站計數器【案例功能】顯示訪問網站的人數【案例目標】如何制作網站計數器【案例要點】防止刷新的網站計數器【案例步驟】(1)編寫CountV1.jsp源代碼文件。(2)編寫CountV2.jsp源代碼文件。32(3)啟動Tomcat服務器后,運行結果如圖4-13所示。圖4-13(a)同一用戶刷新網頁運行的情況,刷新8次,將會顯示8個客戶訪問圖4-13(b)同一用戶刷新網頁運行的情況,刷新多少次均顯示1個客戶訪問334.7cookie對象

——4.7.1Cookie概述

Cookie是服務器發送給瀏覽器的體積很小的純文本信息,用戶以后訪問同一個Web服務器時瀏覽器會把它們原樣發送給服務器。通過讓服務器讀取它原先保存到客戶端的信息,網站能夠為瀏覽者提供一系列的方便,例如在線交易過程中標識用戶身份、安全要求不高的場合避免用戶重復輸入名字和密碼、門戶網站的主頁定制、有針對性地投放廣告,等等。

Cookie的目的就是為用戶帶來方便,為網站帶來增值。雖然有著許多誤傳,事實上Cookie并不會造成嚴重的安全威脅。Cookie永遠不會以任何方式執行,因此也不會帶來病毒或攻擊你的系統。另外,由于瀏覽器一般只允許存放300個Cookie,每個站點最多存放20個Cookie,每個Cookie的大小限制為4KB,因此Cookie不會塞滿你的硬盤,更不會被用作“拒絕服務”攻擊手段。

344.7.2操作Cookie(1)創建Cookie調用Cookie對象的構造函數可以創建Cookie。Cookie對象的構造函數有兩個字符串參數:Cookie名字和Cookie值。名字和值都不能包含空白字符以及下列字符:

[]()=,"/?@:;Cookiecookie=newCookie(CookieName,”Test_Content”);建立了一個Cookie對象,初始化有兩個參數,第一個參數CookieName定義了Cookie的名字,后一個參數也是一個字符串,定義了Cookie的內容,也就是我們希望網頁在用戶的機器上標識的文件內容。例子如下:

<html><body><%StringCookieName=”Sender”;//聲明一個變量Cookiecookie=newCookie(CookieName,“Test_Content”);//為這個變量創建一個Cookie對象Cookie.setMaxAge(10);//設置Cookie變量的有效時間Response.addCookie(cookie);//將Cookie變量加入到Cookie中%></body></html>35(2)讀取Cookie值使用getCookies()方法在程序中讀取Cookie值。該方法返回的是包括所有Cookie值的數組,因此還要通過循環語句取出每個Cookie的值。從Cookie中取得數據的步驟如下:①調用request對象的getCookies方法,取得保存在Cookie中的數據,返回值為一個Cookie變量的數組,語法如下:Cookie[]數組名=requ

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論