第四章 JSP隱含對象_第1頁
第四章 JSP隱含對象_第2頁
第四章 JSP隱含對象_第3頁
第四章 JSP隱含對象_第4頁
第四章 JSP隱含對象_第5頁
已閱讀5頁,還剩127頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

第四章JSP隱含對象JSP作為Web組件,為和Web容器和其他Web組件進行通信和協作,提供了內置的與HTTP請求和相應相關的對象,方便與其他Web組件協作和信息共享。這些對象不需要定義和引用,在JSP腳本和表達式腳本中可以直接使用。JSP提供了9種內置對象,分別與ServletAPI中的類和接口對應,分別包括:out:輸出對象;exception:異常對象;request:請求對象;response:響應對象;session:會話對象;config:配置對象,讀取web.xml配置信息application:應用服務器對象;page:JSP本身頁面類對象;pageContext:頁面級環境變量作為頁面級容器4.1out隱含對象概念:out是JSP頁面向瀏覽器發出響應流PrintWriter的實例對象,通過相應方法向瀏覽器發出文本響應。一、輸出信息的方法1、print()和println():用于打印輸出信息,被打印的信息可以是基本數據類型(如int等),也可以是對象(如字符串等)。兩者的區別在于輸出的信息在返回客戶端的源代碼中是否換行。注:思考一下使用瀏覽器查看兩種瀏覽方式時是否會出現換行。4.1out隱含對象即使使用println()進行輸出在瀏覽器中也不會換行顯示信息,要實現這個功能,必須使用換行符,如“<br>”。<body><% out.print("123");out.print("<br>"); out.print("456"); %></body>4.1out隱含對象預覽后,IE瀏覽器中顯示的內容為:服務器返回的HTML代碼為:123

456<body>123<br>456</body>4.1out隱含對象2、newLine()newLine()表示輸出一個回車換行符,例如:<body><% out.print("123"); out.newLine(); out.print("456"); %></body>4.1out隱含對象服務器返回的HTML代碼為:<body>123456</body>4.1out隱含對象二、

緩沖區相關的方法1、flush()方法flush()用于刷新流,在Java中I/O操作被轉化為流操作。out.write()輸出的信息會被暫存在流對象緩沖區中,刷新操作把緩沖區中的信息傳遞給目標對象處理。如果目標對象是另外一個字符流或字節流,同樣也刷新它。所以,調用flush()方法會導致刷新所有輸出流對象鏈中的緩沖區。如果緩沖區滿了,這個方法被自動調用,輸出緩沖區中的信息。4.1out隱含對象注:在流關閉時調用print()或flush()會引發一個IOException異常,例如:在Tomcat命令行窗口中顯示“警告:Internalerrorflushingthebufferinrelease()”的異常信息。

<%out.close();out.flush(); %>4.1out隱含對象2、clear()方法clear()表示清除緩沖區中的信息。如果緩沖區是空的,執行此方法會引發IOException異常。3、clearBuffer()clearBuffer()的功能與clear()相似,它將輸出緩沖區清除后返回,與clear()不同的是它不拋出異常。4.1out隱含對象4、getBufferSize()getBufferSize()返回輸出緩沖區的大小,單位字節,如果沒有緩沖區,則返回0。5、getRemaining()getRemaining()返回緩沖區剩余的空閑空間,單位字節。6、isAutoFlush()isAutoFlush()返回一個真假值,用于標示緩沖區是否自動刷新。4.1out隱含對象預覽后,顯示的信息為:緩沖區總容量=8192

緩沖區空閉容量=7883

緩沖區是否自動刷新=true<%out.print("緩沖區總容量="+out.getBufferSize()+"<br>");out.print("緩沖區空閉容量="+out.getRemaining()+"<br>");out.print("緩沖區是否自動刷新="+out.isAutoFlush());%>Web工作模式請求-響應模式。客戶端(瀏覽器)向服務器發出HTTP請求。在HTTP請求中包含傳遞到服務器的數據。Web服務器接收到請求,對請求進行處理Web服務器通過HTTP向客戶端發送響應。客戶端接收到響應后,進行顯示或跳轉。4.2request隱含對象HTTP請求中包含的信息:請求頭(RequestHeader):指示客戶端信息和請求體信息。請求頭功能:向服務器指示客戶端和請求體的基本信息,便于服務器采用不同的處理。請求頭包含的主要信息:

-請求的協議。

-瀏覽器使用的語言。

-瀏覽器字符編碼。

-請求數據的大小(content-length).

-CookieHTTP協議的常見請求頭頭標記說明包含的值例子User-Agent客戶端的類型,即瀏覽器名稱LII-Cello/1.0libwww/2.5Accept瀏覽器可接受的MIME類型各種標準的MIME類型Accept-Charset瀏覽器支持的字符編碼字符編碼,如ISO-8859-1Accept-Encoding瀏覽器知道如何解碼的數據編碼類型x-compress;x-zipAccept-Language瀏覽器指定的語言如en:EnglishConnection是否使用持續連接Keep-Alive:持續連接Content-Length使用POST方法提交時,傳遞數據的字節數Cookie保存的Cookie對象Host主機和端口)請求體(RequestBody)包含具體的向服務器提交的數據,服務器可以取得客戶提交的數據。類型:

-文本類型:

1)GET請求

2)不包含文件的POST請求

-二進制類型:

1)包含文件的POST請求。JSPWeb的請求對象——request請求對象的類型:javax.servlet.http.HttpServletRequest請求對象的功能:

-取得客戶端請求頭信息,即客戶端信息

-取得客戶端請求體信息,即客戶提交的數據

-傳遞不同請求之間的共享信息(只能使用在轉發情況)。request的生命周期請求對象的生成:

(1)請求對象在Web容器接收到HTTP請求后自動創建。

(2)Web容器將請求頭和請求體信息寫入到請求對象中。

(3)Web容器將請求對象傳遞給Servlet對象的doGet()或doPost()方法。

(4)Servlet可以通過請求對象取得客戶提交的數據請求對象的銷毀:當Web響應HTTP請求結束后,請求對象自動銷毀,被垃圾收集器收集,釋放所占的內存。4.2request隱含對象一、

用request讀取客戶端傳遞來的參數客戶端向服務器傳遞參數最常見的方法:表單數據附在URL中的查詢串(querystring)參數,也就是URL“?”后面的參數:http://localhost/exam.jsp?name=tomcat

4.2request隱含對象1、用request讀取單值參數單值參數:一個變量最多有一個值。讀取方法:request對象的getParameter()方法讀取指定變量名的參數值,方法的定義:方法的形參是參數的變量名,以String形式返回變量的值。如果request對象中沒有指定的變量,則返回null。publicjava.lang.StringgetParameter(java.lang.Stringname)4.2request隱含對象request.getParameter(“”)缺陷:讀取表單傳來的參數時,參數變量名是以硬編碼形式嵌在代碼中,缺乏靈活性。getParameterNames()能返回request對象中的參數變量名,并保存在枚舉類型中,定義方法:publicjava.util.EnumerationgetParameterNames()4.2request隱含對象2、用request讀取多值參數多值參數的典型代表是表單復選框,例如在一般網站會員注冊信息表單中如果有“愛好”項,那么用戶是可以選定多個愛好的。在服務器端讀取多值參數,要用到request.getParameterValues(),定義:形參為多值參數的變量名,多個參數值返回后存儲在一個字符串數組中。publicjava.lang.String[]getParameterValues(java.lang.Stringname)4.2request隱含對象作用范圍變量:在JSP中包括request、page、session和application等幾種作用范圍變量,他們是將由屬性名和屬性值構成的“name=value”屬性值對象與某個有生命周期的JSP隱含對象相綁定,使屬性值對象有一定的生命周期,或者說使屬性值對象在一定的作用范圍內有效。定義方法:調用隱含對象的setAttribute()方法讀取方法:調用隱含對象的getAttribute()方法4.2request隱含對象二、request作用范圍變量概念:也叫request屬性,用來在服務器端的兩個JSP/Servlet程序間交換數據。Servlet程序A要把數據對象傳遞給Servlet程序B時的工作過程為:程序A調用request.setAttribute()把數據寫入request作用范圍,再通過request轉發跳轉到程序B,將A的request對象被轉發給B,在程序B中通過request.getAttribute()讀取數據對象。4.2request隱含對象1、setAttribute()/getAttribute()方法request.setAttribute()用于把一個屬性對象按指定的名字寫入request作用范圍,語法為:第一個形參是作用范圍變量名,名字要唯一,第二個形參是屬性值對象。publicvoidsetAttribute(java.lang.Stringname,java.lang.Objecto)4.2request隱含對象request.getAttribute()從request作用范圍讀出指定名字的屬性對象,它的語法為:形參是屬性值對象的變量名,方法返回的對象是Object類型,一般要進行強制類型轉換,還原屬性值對象的原本數據類型。例如:publicjava.lang.ObjectgetAttribute(java.lang.Stringname)4.2request隱含對象4.2request隱含對象2、getRequestDispatcher()——轉發跳轉request轉發器(RequestDispatcher)的作用:獲得目標資源的轉發器,通過轉發器將當前Servlet程序的request和response對象轉發給目標Servlet資源,跳轉至目標資源上運行程序,目標資源再通過request對象讀取上一資源傳遞給它的request屬性。4.2request隱含對象request.getRequestDispatcher()的作用是返回目標資源的RequestDispatcher對象,語法為:形參是當前Web應用目標資源的URI,可以使用相對路徑或絕對路徑。publicrequestDispatchergetRequestDispatcher(java.lang.Stringpath)4.2request隱含對象RequestDispatcher中主要的方法有:publicvoidforward(ServletRequestrequest,ServletResponseresponse)throwsServletException,java.io.IOException形參是當前Servlet程序的request和response隱含對象。該方法能夠把當前Servlet程序的request和response隱含對象轉發給目標資源,并跳轉至目標資源運行代碼。4.2request隱含對象publicvoidinclude(ServletRequestrequest,ServletResponseresponse)throwsServletException,java.io.IOException形參是當前JSP/Servlet程序的request、response對象。該方法用于包含目標資源,如果目標資源是JSP頁面,它會被編譯成Servlet程序后再運行。進行包含操作前,允許對當前JSP/Servlet程序的response輸出緩沖區進行刷新。4.2request隱含對象3、removeAttribute()作用:從request作用范圍中刪除指定名字的屬性,它的語法為:參數是屬性名。例如:publicvoidremoveAttribute(Stringname)request.removeAttribute(“name”);4.2request隱含對象4、setCharacterEncoding()作用:定義request對象中的parameter參數的字符編碼標準。例如,parameter參數如果有中文,在讀取參數前調用此方法,設置參數的編碼標準為GB2312,可以解決以POST方式提交參數的中文亂碼問題。4.2request隱含對象三、

用request讀取系統信息1、getProtocol()返回request請求使用的協議及版本號,方法的語法為:例如:publicjava.lang.StringgetProtocol()<%out.print(request.getProtocol());%>4.2request隱含對象2、getRemoteAddr()返回客戶端或最后一個客戶端代理服務器的IP地址,方法的語法為:例如:預覽后顯示:。publicjava.lang.StringgetRemoteAddr()<%out.print(request.getRemoteAddr());%>4.2request隱含對象3、getRemoteHost()返回客戶端主機名或最后一個客戶端代理服務器的主機名,如果主機名讀取失敗,則返回主機的IP地址。方法的語法為:publicjava.lang.StringgetRemoteHost()4.2request隱含對象4、getScheme()返回當前request對象的構造方案,例如http、https和ftp等,不同的構造方案有不同的URL構造規則。例如:預覽后顯示:http。<%out.print(request.getScheme());%>4.2request隱含對象5、getQueryString()返回URL的查詢字串,即URL中“?”后面的“name=value”對。例如,客戶端請求的URL為:目標資源untiltled.jsp中有以下代碼:預覽后顯示:dd=22&ff=2。:8080/untitled.jsp?dd=22&ff=2<%out.print(request.getQueryString());%>4.2request隱含對象6、getReuquestURI()返回URL請求中目標資源的URI。例如,有以下的HTTP請求:目標資源untitled.jsp中有如下的代碼:預覽后顯示:/untitled.jsp。:8080/untitled.jsp?dd=22&ff=2<%out.print(request.getReuquestURI());%>4.2request隱含對象7、getMethod()返回request請求的提交方式,如:GET、POST等。8、getServletPath()返回調用Servlet程序的URL請求,例如,對于:目標資源untitled.jsp中有如下的代碼:out.print(request.getServletPath());預覽后顯示:/untitled.jsp。:8080/untitled.jsp4.2request隱含對象9、getRealPath()返回虛擬路徑在服務器上的真實絕對路徑,例如,對于:目標資源untitled.jsp中有如下的代碼:預覽后顯示:C:\tomcat\webapps\ROOT\untitled.jsp。:8080/untitled.jsp<%out.print(request.getRealPath(request.getServletPath()));%>4.2request隱含對象四、

用request讀取HTTP請求報頭信息客戶端瀏覽器向服務器請求資源的過程一般分為三步來完成:第一步:發出請求。瀏覽器通過HTTP協議向服務器提交請求,例如::8080/exam.jsp4.2request隱含對象第二步:HTTP報頭信息交換。JSP服務器接收到客戶端的資源請求后,判斷請求是否合法,如果請求有效,則進行報頭信息交換。客戶機用HTTP協議向服務器傳遞的報頭信息叫HTTP請求報頭,服務器給客戶機返回的報頭信息叫HTTP響應報頭。第三步:信息傳輸例如把JSP頁面的輸出信息從服務器上傳回瀏覽器,或把客戶機上的文件上傳到服務器。4.2request隱含對象在JSP中要讀取HTTP請求報頭中的信息,可以使用getHeaderNames()和getHeader()等方法。1、getHeader()返回指定的HTTP報頭信息,語法為:該方法的形參為報頭名字publicjava.lang.StringgetHeader(java.lang.Stringname)4.2request隱含對象3、getHeaderNames()返回HTTP報頭的名字,名字存儲在一個枚舉型對象中。以下代碼讀出HTTP請求報頭中的信息:4.2request隱含對象程序段的運行結果類似于:4.2request隱含對象五、

用request讀取cookieCookie,或稱Cookies,在Web技術中指Web服務器暫存在客戶端瀏覽器內存或硬盤文件中的少量數據。作用:Web服務器通過HTTP報頭來獲得客戶端中的cookie信息。Cookie信息的基本結構:類似于“name=value”對,每個數據有一個變量名。4.2request隱含對象Cookie信息的有效期:有效期短的直接存于IE瀏覽器內存中,關閉瀏覽器后,這些cookie信息也就丟失。有效期長的信息存儲在硬盤文件上。保存位置:所有曾經訪問過的網站的cookie文件(*.txt)保存在XP內“C:\DocumentsandSettings\admin\Cookies”文件夾中。4.2request隱含對象在JSP中使用cookie的基本過程為:在服務器端生成cookie對象,把待保存信息寫入cookie對象中;必要時設置cookie對象的生命期;把cookie對象傳給客戶端瀏覽器保存;服務器端程序需要cookie信息時,用代碼讀取cookie信息。4.2request隱含對象1、Cookie類javax.servlet.http.Cookie類用來生成一個cookie對象,構造方法:第一個形參是cookie數據的變量名,第二個形參是待保存的數據,字符串類型。Cookie(java.lang.Stringname,java.lang.Stringvalue)4.2request隱含對象publicvoidsetMaxAge(intexpiry)這個方法定義cookie對象的生命期,形參是生命時間數,單位秒,默認值為-1。如果生命周期為負整數,表示這個cookie對象是臨時的,不要保存在硬盤文件中,關閉IE瀏覽器后cookie數據自動丟失。如果生命期為零,表示刪除這個cookie。Cookie的生命期定義要在cookie對象傳回客戶端前進行。publicintgetMaxAge()方法讀取生命時間。4.2request隱含對象publicvoidsetSecure(booleanflag)形參取值true時,表示用https或SSL安全協議將cookie傳回服務器;取false時表示用當前默認的協議傳回cookie。publicjava.lang.StringgetName()返回當前cookie對象的變量名。publicjava.lang.StringgetValue()返回當前cookie對象的值。4.2request隱含對象2、將cookie對象傳回客戶端將cookie對象傳回客戶端,要用到另外一個JSP隱含對象response,用到的方法為:形參是待保存的cookie對象。例如:publicvoidaddCookie(Cookiecookie)第1行:<%第2行:Cookiemsg=newCookie("login","tom");第3行: msg.setMaxAge(60*60*60*60);第4行: response.addCookie(msg);第5行:%>4.2request隱含對象3、讀取cookie對象讀取客戶端存儲的cookie,用request對象的getCookies()方法,它的語法為:返回的是一個cookie對象數組,當前瀏覽器中所有有效的cookie會通過HTTP請求報頭返回給服務器,每個數組分量是一個返回的cookie對象。如果客戶端沒有有效的cookie,則返回null值。publicCookie[]getCookies()4.2request隱含對象4.2request隱含對象例:定義一個cookie對象,存儲用戶的登錄名,生命期為30天,在另一個頁面中查詢這個cookie,如果讀取的cookie不為空,則顯示用戶登錄名,否則顯示“沒有登錄”信息。再定義一個cookie對象,記錄客戶最近瀏覽過的五本圖書的書號:AB001、KC981、DE345、RD332和PC667,如果已經登錄,則顯示書號,cookie生命期為30天。

您已經登錄,用戶名=John

您最近瀏覽過的圖書書號是:AB001,KC981,DE345,RD332,PC6674.3response隱含對象一、

輸出緩沖區與響應提交輸出緩沖區用于暫存Servlet程序的輸出信息,減少服務器與客戶端的網絡通信次數。傳送給客戶端的信息稱之為響應信息(response),如果輸出緩沖區中的響應信息已經傳遞給客戶端,稱響應是已經提交的(responsecommitted)。刷新操作強制把輸出緩沖區中的內容傳送回客戶端。4.3response隱含對象response對象中和輸出緩沖區相關的方法有:1、publicvoidflushBuffer()throwsjava.io.IOException刷新輸出緩沖區,把信息傳回客戶端。2、publicvoidsetBufferSize(intsize)定義輸出緩沖區的大小,單位字節。3、publicbooleanisCommitted()返回緩沖區中的響應信息是否已經提交。4.3response隱含對象4.3response隱含對象預覽的結果為:4.3response隱含對象二、HTTP響應報頭設置服務器通過HTTP響應報頭向客戶端瀏覽器傳送通信信息。默認情況下,響應信息是以字符形式傳送。1、publicvoidsetContentType(java.lang.Stringtype)定義返回客戶端的信息類型及編碼標準,常用的是“text/html;charset=UTF-8”。JSP:<%@pagecontentType=“text/html;charset=gb2312”%>,JSP頁面生成Servlet程序后,在_jspService()方法中產生相應代碼:response.setContentType("text/html;charset=gb2312");4.3response隱含對象2、publicvoidsetCharacterEncoding(java.lang.Stringcharset)定義返回客戶端信息的編碼標準。如果已經用response.setContentType()定義字符集,則調用此方法將重新設置字符集。注:信息字符集的定義要在緩沖區刷新前進行。4.3response隱含對象3、publicvoidsendError(intsc)throwsjava.io.IOException向客戶端返回HTTP響應碼并清空輸出緩沖區。HTTP響應碼由三位的十進制數構成:1xx:請求收到,繼續處理。2xx:成功,行為被成功地接受、理解和接受。3xx:重定向,為了完成請求,必須進一步執行的動作。4xx:客戶端錯誤。5xx:服務器出錯。4.3response隱含對象例如在IE瀏覽器地址欄中輸入::8080/aabb.jsp,企圖訪問Tomcat服務器中不存在的資源aabb.jsp,則Tomcat會給客戶端返回一個HTTP響應碼404,在IE瀏覽器上顯示HTTP響應碼及錯誤信息。4.3response隱含對象如果要人為地返回HTTP響應碼,則調用sendError(intsc)方法,如:預覽后,在IE瀏覽器中顯示404狀態碼信息。4.3response隱含對象如果要自定義響應碼的返回信息,則調用方法:publicvoidsendError(intsc,java.lang.Stringmsg)throwsjava.io.IOException第一個形參是響應碼,第二個形參是響應碼的信息。如:4.3response隱含對象預覽后,在IE瀏覽器上看到的信息為:4.3response隱含對象如果希望出現某個響應碼時,服務器自動轉至某頁面顯示信息,需要在Web應用中的WEB-INF\web.xml部署文件中作出定義。例如,當出現404錯誤碼時,轉至錯誤處理頁面顯示錯誤信息,在web.xml的<web-app></web-app>標記內添加一項部署信息如下示:4.3response隱含對象4、publicvoidsetHeader(java.lang.Stringname,java.lang.Stringvalue)第一個形參為報頭名,第二個形參是報頭值。關于HTTP報頭的定義請參考RFC2047(/rfc/rfc2047.txt)。HTTP報頭中有一個名為“Refresh”的響應報頭,它的作用是使IE瀏覽器在若干秒后自動刷新當前網頁或跳轉至指定的URL資源。4.3response隱含對象這個報頭的語法為:response.setHeader(“Refresh”,”定時秒數;url=目標資源的URL”)方法的第一個形參是響應報頭名“Refresh”,第二個形參由兩部分組成:第一部分定義秒數,即:若干秒后自動刷新,第二部分為目標資源的URL,缺省時默認刷新當前頁面。4.3response隱含對象例如:4.3response隱含對象如果要實現若干秒后自動跳轉至目標頁,代碼如:4.3response隱含對象三、

用response實現JSP頁面重定向作用:重定向是JSP中實現程序跳轉至目標資源的方法之一。基本思想:服務器將目標資源完整的URL通過HTTP響應報頭發送給客戶端瀏覽器,瀏覽器接收到URL后更新至地址欄中,并將目標資源的URL提交給服務器。缺點:會有一定網絡時延4.3response隱含對象實現JSP頁面跳轉的主要方法有:RequestDispatcher.forward()轉發跳轉,response.sendRedirect()重定向跳轉。兩種跳轉區別:(1)客戶端瀏覽器地址欄變化:重定向是通過客戶端重新發送URL來實現,會導致瀏覽器地址更新;而轉發跳轉是直接在服務器端切換程序,目標資源的URL不出現在瀏覽器的地址欄中。4.3response隱含對象(2)request和response資源共享區別轉發能夠把當前JSP頁面中的request、response對象轉發給目標資源;重定向會導致當前JSP頁面的request、response對象生命期結束,在目標資源中無法取得上一個JSP頁面的request對象;(3)網絡時延轉發跳轉直接在服務器端進行,基本上沒有網絡傳輸時延,重定向有網絡傳輸時延。4.3response隱含對象如果要實現服務器中兩個Servlet程序間跳轉,并且要使用request作用范圍變量交換數據,應該優先使用request轉發跳轉。用重定向實現程序跳轉時,如果要求傳遞數據給目標資源,一個簡單、可行的方法是把數據編碼在URL查詢串中,例如::8080/exam.jsp?name=tom。4.3response隱含對象用response實現重定向,調用的方法:publicvoidsendRedirect(java.lang.Stringlocation)throwsjava.io.IOException形參是目標資源的URL,可以是相對路徑或絕對路徑。例如:

<%response.sendRedirect(“exam.jsp”)%>4.4application隱含對象一、application作用范圍變量application作用范圍變量能夠被Web應用中的所有程序共享。application對象提供的存儲方法有:publicjava.util.EnumerationgetAttributeNames()返回當前上下文中所有可用的appliaction作用范圍變量名,并存儲在枚舉型對象中。4.4application隱含對象2、publicjava.lang.ObjectgetAttribute(java.lang.Stringname)從application作用范圍中讀取指定名字的屬性值。返回的屬性值為Object類型,取到的屬性值一般要進行強制類型轉換,還原其原本數據類型。如果指定的屬性值對象不存在,則返回null。以下代碼段是遍歷當前Web應用中所有的application屬性:4.4application隱含對象3、publicvoidsetAttribute(java.lang.Stringname,java.lang.Objectobject)作用:把一個屬性寫入application作用范圍。參數:第一個形參name是屬性名,第二個形參object是屬性值,它是一個Java對象。如果屬性值object為null,則相當于刪除一個名為name的屬性。如果容器中已存在指定名字的屬性,寫入操作會用當前的屬性值替換原有的屬性值。4.4application隱含對象4、publicvoidremoveAttribute(java.lang.Stringname)作用:從Servlet容器中刪除指定名字的屬性。形參是字符串形式的屬性名。例:用application實現一個簡單的站點計數器,當訪問JSP頁面時,頁面進行訪問次數統計,并打印當前計數值。操作步驟如下:(1)新建JSP文件,使其完成application作用范圍變量的寫入和讀取,4.4application隱含對象(2)啟動Tomcat,預覽該文件,出現訪問計數值。當再次打開另一個瀏覽器窗口預覽該頁面時,會發現計數器增加。(3)重啟Tomcat,再訪問jsp,發現計數從1開始計數。原因:application屬性是存儲在Servlet容器中,關閉Tomcat會導致application屬性丟失,所以計數器重新計數。4.4application隱含對象二、application的其它應用1、取得目標資源的RequestDispatcher對象語法為:publicRequestDispatchergetRequestDispatcher(java.lang.Stringpath)形參是目標資源的URI,要以“/”開頭,為絕對路徑。如果無法取得RequestDispatcher對象則返回null。4.4application隱含對象2、publicjava.lang.StringgetMimeType(java.lang.Stringfile)返回指定文件的MIME-type,這些MIME-type由Servlet容器定義,如果文件的MIME-type未知,則返回null。例:在ROOT文件夾下分別建立三個名為d.doc、d.xls、d.zip的空文件,用以下代碼查詢文件的MIME-type:4.4application隱含對象預覽后運行結果為:4.4application隱含對象3、publicjava.lang.StringgetRealPath(java.lang.Stringpath)返回虛擬目錄對應的真實絕對路徑,例如:<%out.print(application.getRealPath("/"));%>運行結果為“……tomcat\webapps\JSP\”。4.5session隱含對象session是指一個終端用戶與后臺某交互式系統進行通信的時間間隔。session通信周期:通常把從登錄進入系統到注銷退出系統之間所經歷的時間。如何把一個操作步中產生的有用信息保存下來并進行標識后供后續的操作步使用稱之為session跟蹤(SessionTracking)問題。4.5session隱含對象一、

用URL重寫實現session跟蹤URL重寫(URLRewriting)就是把session數據編碼成“name=value”對,當作URL的查詢串附在URL后,用帶有查詢串的URL訪問下一個目標資源時,附在URL查詢串中的session數據自然被傳送給下一頁。4.5session隱含對象例如,當前的a.jsp頁面中程序產生了一個session數據“status=90”,現要重定向至:8080/k.jsp,并且k.jsp要用到“status=90”這個session數據,則新的URL為::8080/k.jsp?status=90在a.jsp中產生此URL的代碼為:4.5session隱含對象例:寫一個簡單的登錄頁面,效果如圖示。4.5session隱含對象(1)新建JSP文件(2)設計如上圖所示的表單,用戶名文本域的名字為“userName”,口令文本域的名字為“pw”,類型取值為“密碼”,整個表單提交給自己。(3)在</body>標記前一行錄入如下代碼,實現登錄驗證和重定向4.5session隱含對象(4)再新建一個JSP文件,在<body></body>標記中錄入以下代碼,實現session信息的讀取與驗證,并動態生成十個超鏈接。4.5session隱含對象(5)啟動Tomcat,預覽第一個頁面,輸入幾個非法用戶名或口令,均無法成功登錄,輸入合法數據后后,登錄成功,并轉至第二個頁面。在其中,單擊10個超鏈接,發現URL上均帶有兩個session數據。4.5session隱含對象二、

用cookie實現session跟蹤用cookie實現session跟蹤的基本原理是:把一個session數據封裝在一個cookie對象中,將cookie對象傳回客戶端存儲,需要用到時用代碼從客戶端讀回。例:題目同前例,此處要求用cookie保存用戶成功登錄的session數據“name=tom”。只需要修改兩個頁面中的代碼即可。(1)對第一個jsp頁面,只需要修改它的JSP代碼(2)對第二個jsp:4.5session隱含對象三、

用隱藏表單域實現session跟蹤隱藏表單域在頁面上不可視,它相當于一個變量,如果把一個session數據存儲在其中,則提交表單時,隱藏表單域中的數據也會被提交給服務器。例:設計一個JSP頁面實現猜數游戲,如下圖示,首次啟動頁面時會產生一個0~100間的整數讓用戶猜。用戶在表單中輸入數據,提交后頁面判斷是否正確,如果猜小了或猜大了則給出提示,如果猜中,則顯示目標數據和用戶輸入的數據。頁面還顯示用戶總共猜了多少次。4.5session隱含對象操作步驟如下:(1)新建JSP文件。(2)切換到代碼視圖,找到<form>標記,在它前面輸入如下代碼:4.5session隱含對象(3)啟動Tomcat,預覽本頁,出現了前圖中的猜數游戲,實現了用隱藏表單域保存session數據。注:隱藏域有一定的安全缺陷,例如運行該頁面,通過IE瀏覽器的菜單【查看】→【源文件】,可查看到隱藏表單域的HTML代碼及其取值。4.5session隱含對象四、session作用范圍變量與session跟蹤session隱含對象由Web服務器創建,并存儲在服務器端,功能強大,實現session跟蹤最直接的方法。在后續的學習中,提到“session”時,如果不特別說明,就是指session對象。session作用范圍變量也叫session屬性。4.5session隱含對象1、publicbooleanisNew()作用:判斷session對象是新創建的,還是已經存在。返回true時,表示session對象是剛創建的,也表示本次客戶端發出的請求是本次session通信的第一次請求。注:不過并不表示客戶端瀏覽器窗口是新打開的。例:在前面我們接觸過一個站點計數器,但那個計數存在一個缺陷,刷新當前窗口時計數器的值會增加,這是不合理的。現在用session.isNew()來修訂這個缺陷,防止刷新窗口時計數值增加。原理是:isNew()方法返回true值時,表示這是一次新的訪問,此時允許計數器加1計數。則代碼修改:4.5session隱含對象2、publicjava.lang.StringgetId()作用:返回當前session對象的ID號例:通過session對象的ID號理解JSP服務器識別session客戶端的方法。操作步驟如下:(1)新建JSP文件,在<body></body>中輸入以下代碼:(2)啟動Tomcat,打開兩個IE瀏覽器窗口,瀏覽器上顯示的一串字符串就是隨機生成的sessionID號,兩個瀏覽器窗口中顯示的ID號均不相同。說明在不同的瀏覽器窗口表示不同的客戶端。4.5session隱含對象3、publiclonggetLastAccessedTime()作用:返回客戶端最后一次請求的發送時間。返回值是一個long型的整數,單位毫秒,是從格林威治時間1970-1-100:00:00到當前所經歷的毫秒數。例:以下代碼取得session通信中最后一次請求時間:4.5session隱含對象4、publicvoidinvalidate()使當前session無效,session作用范圍變量也會隨之丟失。5、publicvoidsetMaxInactiveInterval(intinterval)形參是一個整數,定義session對象的超時時間,單位秒。作用:如果客戶端從最后一次請求開始,在連續的interval秒內一直沒有再向服務器發送HTTP請求,則服務器認為session超時,將刪除本次的session對象。注:如果超時時間為負數,表示永不超時。4.5session隱含對象6、publicintgetMaxInactiveInterval()讀取當前的session超時時間,單位秒。7、publicvoidsetAttribute(java.lang.Stringname,java.lang.Objectvalue)定義session作用范圍變量,第一個形參name是session作用范圍變量名,第二個形參value是session屬性。如果value為null,則表示取消session屬性和session的綁定關系。4.5session隱含對象8、publicjava.lang.ObjectgetAttribute(java.lang.Stringname)讀取一個session作用范圍變量,返回一個Object類型的對象,如果找不到指定名字的數據對象,則返回null。返回值需要進行強制類型轉換,才能參與數據處理。4.5session隱含對象9、publicjava.util.EnumerationgetAttributeNames()將當前合法的所有session作用范圍變量名讀到一個枚舉型對象中。10、publicvoidremoveAttribute(java.lang.Stringname)解除指定名字的數據對象與session的綁定關系,即刪除一個指定名字的session屬性。4.5session隱含對象例:用session保存前例

溫馨提示

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

評論

0/150

提交評論