![第四章 JSP隱含對象_第1頁](http://file4.renrendoc.com/view10/M03/35/0D/wKhkGWV5DoKAVJlyAADKnPAu6AI384.jpg)
![第四章 JSP隱含對象_第2頁](http://file4.renrendoc.com/view10/M03/35/0D/wKhkGWV5DoKAVJlyAADKnPAu6AI3842.jpg)
![第四章 JSP隱含對象_第3頁](http://file4.renrendoc.com/view10/M03/35/0D/wKhkGWV5DoKAVJlyAADKnPAu6AI3843.jpg)
![第四章 JSP隱含對象_第4頁](http://file4.renrendoc.com/view10/M03/35/0D/wKhkGWV5DoKAVJlyAADKnPAu6AI3844.jpg)
![第四章 JSP隱含對象_第5頁](http://file4.renrendoc.com/view10/M03/35/0D/wKhkGWV5DoKAVJlyAADKnPAu6AI3845.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第四章JSP隱含對象JSP作為Web組件,為和Web容器和其他Web組件進行通信和協(xié)作,提供了內(nèi)置的與HTTP請求和相應(yīng)相關(guān)的對象,方便與其他Web組件協(xié)作和信息共享。這些對象不需要定義和引用,在JSP腳本和表達式腳本中可以直接使用。JSP提供了9種內(nèi)置對象,分別與ServletAPI中的類和接口對應(yīng),分別包括:out:輸出對象;exception:異常對象;request:請求對象;response:響應(yīng)對象;session:會話對象;config:配置對象,讀取web.xml配置信息application:應(yīng)用服務(wù)器對象;page:JSP本身頁面類對象;pageContext:頁面級環(huán)境變量作為頁面級容器4.1out隱含對象概念:out是JSP頁面向瀏覽器發(fā)出響應(yīng)流PrintWriter的實例對象,通過相應(yīng)方法向瀏覽器發(fā)出文本響應(yīng)。一、輸出信息的方法1、print()和println():用于打印輸出信息,被打印的信息可以是基本數(shù)據(jù)類型(如int等),也可以是對象(如字符串等)。兩者的區(qū)別在于輸出的信息在返回客戶端的源代碼中是否換行。注:思考一下使用瀏覽器查看兩種瀏覽方式時是否會出現(xiàn)換行。4.1out隱含對象即使使用println()進行輸出在瀏覽器中也不會換行顯示信息,要實現(xiàn)這個功能,必須使用換行符,如“<br>”。<body><% out.print("123");out.print("<br>"); out.print("456"); %></body>4.1out隱含對象預(yù)覽后,IE瀏覽器中顯示的內(nèi)容為:服務(wù)器返回的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隱含對象服務(wù)器返回的HTML代碼為:<body>123456</body>4.1out隱含對象二、
緩沖區(qū)相關(guān)的方法1、flush()方法flush()用于刷新流,在Java中I/O操作被轉(zhuǎn)化為流操作。out.write()輸出的信息會被暫存在流對象緩沖區(qū)中,刷新操作把緩沖區(qū)中的信息傳遞給目標對象處理。如果目標對象是另外一個字符流或字節(jié)流,同樣也刷新它。所以,調(diào)用flush()方法會導(dǎo)致刷新所有輸出流對象鏈中的緩沖區(qū)。如果緩沖區(qū)滿了,這個方法被自動調(diào)用,輸出緩沖區(qū)中的信息。4.1out隱含對象注:在流關(guān)閉時調(diào)用print()或flush()會引發(fā)一個IOException異常,例如:在Tomcat命令行窗口中顯示“警告:Internalerrorflushingthebufferinrelease()”的異常信息。
<%out.close();out.flush(); %>4.1out隱含對象2、clear()方法clear()表示清除緩沖區(qū)中的信息。如果緩沖區(qū)是空的,執(zhí)行此方法會引發(fā)IOException異常。3、clearBuffer()clearBuffer()的功能與clear()相似,它將輸出緩沖區(qū)清除后返回,與clear()不同的是它不拋出異常。4.1out隱含對象4、getBufferSize()getBufferSize()返回輸出緩沖區(qū)的大小,單位字節(jié),如果沒有緩沖區(qū),則返回0。5、getRemaining()getRemaining()返回緩沖區(qū)剩余的空閑空間,單位字節(jié)。6、isAutoFlush()isAutoFlush()返回一個真假值,用于標示緩沖區(qū)是否自動刷新。4.1out隱含對象預(yù)覽后,顯示的信息為:緩沖區(qū)總?cè)萘?8192
緩沖區(qū)空閉容量=7883
緩沖區(qū)是否自動刷新=true<%out.print("緩沖區(qū)總?cè)萘?"+out.getBufferSize()+"<br>");out.print("緩沖區(qū)空閉容量="+out.getRemaining()+"<br>");out.print("緩沖區(qū)是否自動刷新="+out.isAutoFlush());%>Web工作模式請求-響應(yīng)模式??蛻舳?瀏覽器)向服務(wù)器發(fā)出HTTP請求。在HTTP請求中包含傳遞到服務(wù)器的數(shù)據(jù)。Web服務(wù)器接收到請求,對請求進行處理Web服務(wù)器通過HTTP向客戶端發(fā)送響應(yīng)。客戶端接收到響應(yīng)后,進行顯示或跳轉(zhuǎn)。4.2request隱含對象HTTP請求中包含的信息:請求頭(RequestHeader):指示客戶端信息和請求體信息。請求頭功能:向服務(wù)器指示客戶端和請求體的基本信息,便于服務(wù)器采用不同的處理。請求頭包含的主要信息:
-請求的協(xié)議。
-瀏覽器使用的語言。
-瀏覽器字符編碼。
-請求數(shù)據(jù)的大小(content-length).
-CookieHTTP協(xié)議的常見請求頭頭標記說明包含的值例子User-Agent客戶端的類型,即瀏覽器名稱LII-Cello/1.0libwww/2.5Accept瀏覽器可接受的MIME類型各種標準的MIME類型Accept-Charset瀏覽器支持的字符編碼字符編碼,如ISO-8859-1Accept-Encoding瀏覽器知道如何解碼的數(shù)據(jù)編碼類型x-compress;x-zipAccept-Language瀏覽器指定的語言如en:EnglishConnection是否使用持續(xù)連接Keep-Alive:持續(xù)連接Content-Length使用POST方法提交時,傳遞數(shù)據(jù)的字節(jié)數(shù)Cookie保存的Cookie對象Host主機和端口)請求體(RequestBody)包含具體的向服務(wù)器提交的數(shù)據(jù),服務(wù)器可以取得客戶提交的數(shù)據(jù)。類型:
-文本類型:
1)GET請求
2)不包含文件的POST請求
-二進制類型:
1)包含文件的POST請求。JSPWeb的請求對象——request請求對象的類型:javax.servlet.http.HttpServletRequest請求對象的功能:
-取得客戶端請求頭信息,即客戶端信息
-取得客戶端請求體信息,即客戶提交的數(shù)據(jù)
-傳遞不同請求之間的共享信息(只能使用在轉(zhuǎn)發(fā)情況)。request的生命周期請求對象的生成:
(1)請求對象在Web容器接收到HTTP請求后自動創(chuàng)建。
(2)Web容器將請求頭和請求體信息寫入到請求對象中。
(3)Web容器將請求對象傳遞給Servlet對象的doGet()或doPost()方法。
(4)Servlet可以通過請求對象取得客戶提交的數(shù)據(jù)請求對象的銷毀:當Web響應(yīng)HTTP請求結(jié)束后,請求對象自動銷毀,被垃圾收集器收集,釋放所占的內(nèi)存。4.2request隱含對象一、
用request讀取客戶端傳遞來的參數(shù)客戶端向服務(wù)器傳遞參數(shù)最常見的方法:表單數(shù)據(jù)附在URL中的查詢串(querystring)參數(shù),也就是URL“?”后面的參數(shù):http://localhost/exam.jsp?name=tomcat
4.2request隱含對象1、用request讀取單值參數(shù)單值參數(shù):一個變量最多有一個值。讀取方法:request對象的getParameter()方法讀取指定變量名的參數(shù)值,方法的定義:方法的形參是參數(shù)的變量名,以String形式返回變量的值。如果request對象中沒有指定的變量,則返回null。publicjava.lang.StringgetParameter(java.lang.Stringname)4.2request隱含對象request.getParameter(“”)缺陷:讀取表單傳來的參數(shù)時,參數(shù)變量名是以硬編碼形式嵌在代碼中,缺乏靈活性。getParameterNames()能返回request對象中的參數(shù)變量名,并保存在枚舉類型中,定義方法:publicjava.util.EnumerationgetParameterNames()4.2request隱含對象2、用request讀取多值參數(shù)多值參數(shù)的典型代表是表單復(fù)選框,例如在一般網(wǎng)站會員注冊信息表單中如果有“愛好”項,那么用戶是可以選定多個愛好的。在服務(wù)器端讀取多值參數(shù),要用到request.getParameterValues(),定義:形參為多值參數(shù)的變量名,多個參數(shù)值返回后存儲在一個字符串數(shù)組中。publicjava.lang.String[]getParameterValues(java.lang.Stringname)4.2request隱含對象作用范圍變量:在JSP中包括request、page、session和application等幾種作用范圍變量,他們是將由屬性名和屬性值構(gòu)成的“name=value”屬性值對象與某個有生命周期的JSP隱含對象相綁定,使屬性值對象有一定的生命周期,或者說使屬性值對象在一定的作用范圍內(nèi)有效。定義方法:調(diào)用隱含對象的setAttribute()方法讀取方法:調(diào)用隱含對象的getAttribute()方法4.2request隱含對象二、request作用范圍變量概念:也叫request屬性,用來在服務(wù)器端的兩個JSP/Servlet程序間交換數(shù)據(jù)。Servlet程序A要把數(shù)據(jù)對象傳遞給Servlet程序B時的工作過程為:程序A調(diào)用request.setAttribute()把數(shù)據(jù)寫入request作用范圍,再通過request轉(zhuǎn)發(fā)跳轉(zhuǎn)到程序B,將A的request對象被轉(zhuǎn)發(fā)給B,在程序B中通過request.getAttribute()讀取數(shù)據(jù)對象。4.2request隱含對象1、setAttribute()/getAttribute()方法request.setAttribute()用于把一個屬性對象按指定的名字寫入request作用范圍,語法為:第一個形參是作用范圍變量名,名字要唯一,第二個形參是屬性值對象。publicvoidsetAttribute(java.lang.Stringname,java.lang.Objecto)4.2request隱含對象request.getAttribute()從request作用范圍讀出指定名字的屬性對象,它的語法為:形參是屬性值對象的變量名,方法返回的對象是Object類型,一般要進行強制類型轉(zhuǎn)換,還原屬性值對象的原本數(shù)據(jù)類型。例如:publicjava.lang.ObjectgetAttribute(java.lang.Stringname)4.2request隱含對象4.2request隱含對象2、getRequestDispatcher()——轉(zhuǎn)發(fā)跳轉(zhuǎn)request轉(zhuǎn)發(fā)器(RequestDispatcher)的作用:獲得目標資源的轉(zhuǎn)發(fā)器,通過轉(zhuǎn)發(fā)器將當前Servlet程序的request和response對象轉(zhuǎn)發(fā)給目標Servlet資源,跳轉(zhuǎn)至目標資源上運行程序,目標資源再通過request對象讀取上一資源傳遞給它的request屬性。4.2request隱含對象request.getRequestDispatcher()的作用是返回目標資源的RequestDispatcher對象,語法為:形參是當前Web應(yīng)用目標資源的URI,可以使用相對路徑或絕對路徑。publicrequestDispatchergetRequestDispatcher(java.lang.Stringpath)4.2request隱含對象RequestDispatcher中主要的方法有:publicvoidforward(ServletRequestrequest,ServletResponseresponse)throwsServletException,java.io.IOException形參是當前Servlet程序的request和response隱含對象。該方法能夠把當前Servlet程序的request和response隱含對象轉(zhuǎn)發(fā)給目標資源,并跳轉(zhuǎn)至目標資源運行代碼。4.2request隱含對象publicvoidinclude(ServletRequestrequest,ServletResponseresponse)throwsServletException,java.io.IOException形參是當前JSP/Servlet程序的request、response對象。該方法用于包含目標資源,如果目標資源是JSP頁面,它會被編譯成Servlet程序后再運行。進行包含操作前,允許對當前JSP/Servlet程序的response輸出緩沖區(qū)進行刷新。4.2request隱含對象3、removeAttribute()作用:從request作用范圍中刪除指定名字的屬性,它的語法為:參數(shù)是屬性名。例如:publicvoidremoveAttribute(Stringname)request.removeAttribute(“name”);4.2request隱含對象4、setCharacterEncoding()作用:定義request對象中的parameter參數(shù)的字符編碼標準。例如,parameter參數(shù)如果有中文,在讀取參數(shù)前調(diào)用此方法,設(shè)置參數(shù)的編碼標準為GB2312,可以解決以POST方式提交參數(shù)的中文亂碼問題。4.2request隱含對象三、
用request讀取系統(tǒng)信息1、getProtocol()返回request請求使用的協(xié)議及版本號,方法的語法為:例如:publicjava.lang.StringgetProtocol()<%out.print(request.getProtocol());%>4.2request隱含對象2、getRemoteAddr()返回客戶端或最后一個客戶端代理服務(wù)器的IP地址,方法的語法為:例如:預(yù)覽后顯示:。publicjava.lang.StringgetRemoteAddr()<%out.print(request.getRemoteAddr());%>4.2request隱含對象3、getRemoteHost()返回客戶端主機名或最后一個客戶端代理服務(wù)器的主機名,如果主機名讀取失敗,則返回主機的IP地址。方法的語法為:publicjava.lang.StringgetRemoteHost()4.2request隱含對象4、getScheme()返回當前request對象的構(gòu)造方案,例如http、https和ftp等,不同的構(gòu)造方案有不同的URL構(gòu)造規(guī)則。例如:預(yù)覽后顯示:http。<%out.print(request.getScheme());%>4.2request隱含對象5、getQueryString()返回URL的查詢字串,即URL中“?”后面的“name=value”對。例如,客戶端請求的URL為:目標資源untiltled.jsp中有以下代碼:預(yù)覽后顯示:dd=22&ff=2。:8080/untitled.jsp?dd=22&ff=2<%out.print(request.getQueryString());%>4.2request隱含對象6、getReuquestURI()返回URL請求中目標資源的URI。例如,有以下的HTTP請求:目標資源untitled.jsp中有如下的代碼:預(yù)覽后顯示:/untitled.jsp。:8080/untitled.jsp?dd=22&ff=2<%out.print(request.getReuquestURI());%>4.2request隱含對象7、getMethod()返回request請求的提交方式,如:GET、POST等。8、getServletPath()返回調(diào)用Servlet程序的URL請求,例如,對于:目標資源untitled.jsp中有如下的代碼:out.print(request.getServletPath());預(yù)覽后顯示:/untitled.jsp。:8080/untitled.jsp4.2request隱含對象9、getRealPath()返回虛擬路徑在服務(wù)器上的真實絕對路徑,例如,對于:目標資源untitled.jsp中有如下的代碼:預(yù)覽后顯示:C:\tomcat\webapps\ROOT\untitled.jsp。:8080/untitled.jsp<%out.print(request.getRealPath(request.getServletPath()));%>4.2request隱含對象四、
用request讀取HTTP請求報頭信息客戶端瀏覽器向服務(wù)器請求資源的過程一般分為三步來完成:第一步:發(fā)出請求。瀏覽器通過HTTP協(xié)議向服務(wù)器提交請求,例如::8080/exam.jsp4.2request隱含對象第二步:HTTP報頭信息交換。JSP服務(wù)器接收到客戶端的資源請求后,判斷請求是否合法,如果請求有效,則進行報頭信息交換??蛻魴C用HTTP協(xié)議向服務(wù)器傳遞的報頭信息叫HTTP請求報頭,服務(wù)器給客戶機返回的報頭信息叫HTTP響應(yīng)報頭。第三步:信息傳輸例如把JSP頁面的輸出信息從服務(wù)器上傳回瀏覽器,或把客戶機上的文件上傳到服務(wù)器。4.2request隱含對象在JSP中要讀取HTTP請求報頭中的信息,可以使用getHeaderNames()和getHeader()等方法。1、getHeader()返回指定的HTTP報頭信息,語法為:該方法的形參為報頭名字publicjava.lang.StringgetHeader(java.lang.Stringname)4.2request隱含對象3、getHeaderNames()返回HTTP報頭的名字,名字存儲在一個枚舉型對象中。以下代碼讀出HTTP請求報頭中的信息:4.2request隱含對象程序段的運行結(jié)果類似于:4.2request隱含對象五、
用request讀取cookieCookie,或稱Cookies,在Web技術(shù)中指Web服務(wù)器暫存在客戶端瀏覽器內(nèi)存或硬盤文件中的少量數(shù)據(jù)。作用:Web服務(wù)器通過HTTP報頭來獲得客戶端中的cookie信息。Cookie信息的基本結(jié)構(gòu):類似于“name=value”對,每個數(shù)據(jù)有一個變量名。4.2request隱含對象Cookie信息的有效期:有效期短的直接存于IE瀏覽器內(nèi)存中,關(guān)閉瀏覽器后,這些cookie信息也就丟失。有效期長的信息存儲在硬盤文件上。保存位置:所有曾經(jīng)訪問過的網(wǎng)站的cookie文件(*.txt)保存在XP內(nèi)“C:\DocumentsandSettings\admin\Cookies”文件夾中。4.2request隱含對象在JSP中使用cookie的基本過程為:在服務(wù)器端生成cookie對象,把待保存信息寫入cookie對象中;必要時設(shè)置cookie對象的生命期;把cookie對象傳給客戶端瀏覽器保存;服務(wù)器端程序需要cookie信息時,用代碼讀取cookie信息。4.2request隱含對象1、Cookie類javax.servlet.http.Cookie類用來生成一個cookie對象,構(gòu)造方法:第一個形參是cookie數(shù)據(jù)的變量名,第二個形參是待保存的數(shù)據(jù),字符串類型。Cookie(java.lang.Stringname,java.lang.Stringvalue)4.2request隱含對象publicvoidsetMaxAge(intexpiry)這個方法定義cookie對象的生命期,形參是生命時間數(shù),單位秒,默認值為-1。如果生命周期為負整數(shù),表示這個cookie對象是臨時的,不要保存在硬盤文件中,關(guān)閉IE瀏覽器后cookie數(shù)據(jù)自動丟失。如果生命期為零,表示刪除這個cookie。Cookie的生命期定義要在cookie對象傳回客戶端前進行。publicintgetMaxAge()方法讀取生命時間。4.2request隱含對象publicvoidsetSecure(booleanflag)形參取值true時,表示用https或SSL安全協(xié)議將cookie傳回服務(wù)器;取false時表示用當前默認的協(xié)議傳回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對象數(shù)組,當前瀏覽器中所有有效的cookie會通過HTTP請求報頭返回給服務(wù)器,每個數(shù)組分量是一個返回的cookie對象。如果客戶端沒有有效的cookie,則返回null值。publicCookie[]getCookies()4.2request隱含對象4.2request隱含對象例:定義一個cookie對象,存儲用戶的登錄名,生命期為30天,在另一個頁面中查詢這個cookie,如果讀取的cookie不為空,則顯示用戶登錄名,否則顯示“沒有登錄”信息。再定義一個cookie對象,記錄客戶最近瀏覽過的五本圖書的書號:AB001、KC981、DE345、RD332和PC667,如果已經(jīng)登錄,則顯示書號,cookie生命期為30天。
您已經(jīng)登錄,用戶名=John
您最近瀏覽過的圖書書號是:AB001,KC981,DE345,RD332,PC6674.3response隱含對象一、
輸出緩沖區(qū)與響應(yīng)提交輸出緩沖區(qū)用于暫存Servlet程序的輸出信息,減少服務(wù)器與客戶端的網(wǎng)絡(luò)通信次數(shù)。傳送給客戶端的信息稱之為響應(yīng)信息(response),如果輸出緩沖區(qū)中的響應(yīng)信息已經(jīng)傳遞給客戶端,稱響應(yīng)是已經(jīng)提交的(responsecommitted)。刷新操作強制把輸出緩沖區(qū)中的內(nèi)容傳送回客戶端。4.3response隱含對象response對象中和輸出緩沖區(qū)相關(guān)的方法有:1、publicvoidflushBuffer()throwsjava.io.IOException刷新輸出緩沖區(qū),把信息傳回客戶端。2、publicvoidsetBufferSize(intsize)定義輸出緩沖區(qū)的大小,單位字節(jié)。3、publicbooleanisCommitted()返回緩沖區(qū)中的響應(yīng)信息是否已經(jīng)提交。4.3response隱含對象4.3response隱含對象預(yù)覽的結(jié)果為:4.3response隱含對象二、HTTP響應(yīng)報頭設(shè)置服務(wù)器通過HTTP響應(yīng)報頭向客戶端瀏覽器傳送通信信息。默認情況下,響應(yīng)信息是以字符形式傳送。1、publicvoidsetContentType(java.lang.Stringtype)定義返回客戶端的信息類型及編碼標準,常用的是“text/html;charset=UTF-8”。JSP:<%@pagecontentType=“text/html;charset=gb2312”%>,JSP頁面生成Servlet程序后,在_jspService()方法中產(chǎn)生相應(yīng)代碼:response.setContentType("text/html;charset=gb2312");4.3response隱含對象2、publicvoidsetCharacterEncoding(java.lang.Stringcharset)定義返回客戶端信息的編碼標準。如果已經(jīng)用response.setContentType()定義字符集,則調(diào)用此方法將重新設(shè)置字符集。注:信息字符集的定義要在緩沖區(qū)刷新前進行。4.3response隱含對象3、publicvoidsendError(intsc)throwsjava.io.IOException向客戶端返回HTTP響應(yīng)碼并清空輸出緩沖區(qū)。HTTP響應(yīng)碼由三位的十進制數(shù)構(gòu)成:1xx:請求收到,繼續(xù)處理。2xx:成功,行為被成功地接受、理解和接受。3xx:重定向,為了完成請求,必須進一步執(zhí)行的動作。4xx:客戶端錯誤。5xx:服務(wù)器出錯。4.3response隱含對象例如在IE瀏覽器地址欄中輸入::8080/aabb.jsp,企圖訪問Tomcat服務(wù)器中不存在的資源aabb.jsp,則Tomcat會給客戶端返回一個HTTP響應(yīng)碼404,在IE瀏覽器上顯示HTTP響應(yīng)碼及錯誤信息。4.3response隱含對象如果要人為地返回HTTP響應(yīng)碼,則調(diào)用sendError(intsc)方法,如:預(yù)覽后,在IE瀏覽器中顯示404狀態(tài)碼信息。4.3response隱含對象如果要自定義響應(yīng)碼的返回信息,則調(diào)用方法:publicvoidsendError(intsc,java.lang.Stringmsg)throwsjava.io.IOException第一個形參是響應(yīng)碼,第二個形參是響應(yīng)碼的信息。如:4.3response隱含對象預(yù)覽后,在IE瀏覽器上看到的信息為:4.3response隱含對象如果希望出現(xiàn)某個響應(yīng)碼時,服務(wù)器自動轉(zhuǎn)至某頁面顯示信息,需要在Web應(yīng)用中的WEB-INF\web.xml部署文件中作出定義。例如,當出現(xiàn)404錯誤碼時,轉(zhuǎn)至錯誤處理頁面顯示錯誤信息,在web.xml的<web-app></web-app>標記內(nèi)添加一項部署信息如下示:4.3response隱含對象4、publicvoidsetHeader(java.lang.Stringname,java.lang.Stringvalue)第一個形參為報頭名,第二個形參是報頭值。關(guān)于HTTP報頭的定義請參考RFC2047(/rfc/rfc2047.txt)。HTTP報頭中有一個名為“Refresh”的響應(yīng)報頭,它的作用是使IE瀏覽器在若干秒后自動刷新當前網(wǎng)頁或跳轉(zhuǎn)至指定的URL資源。4.3response隱含對象這個報頭的語法為:response.setHeader(“Refresh”,”定時秒數(shù);url=目標資源的URL”)方法的第一個形參是響應(yīng)報頭名“Refresh”,第二個形參由兩部分組成:第一部分定義秒數(shù),即:若干秒后自動刷新,第二部分為目標資源的URL,缺省時默認刷新當前頁面。4.3response隱含對象例如:4.3response隱含對象如果要實現(xiàn)若干秒后自動跳轉(zhuǎn)至目標頁,代碼如:4.3response隱含對象三、
用response實現(xiàn)JSP頁面重定向作用:重定向是JSP中實現(xiàn)程序跳轉(zhuǎn)至目標資源的方法之一?;舅枷耄悍?wù)器將目標資源完整的URL通過HTTP響應(yīng)報頭發(fā)送給客戶端瀏覽器,瀏覽器接收到URL后更新至地址欄中,并將目標資源的URL提交給服務(wù)器。缺點:會有一定網(wǎng)絡(luò)時延4.3response隱含對象實現(xiàn)JSP頁面跳轉(zhuǎn)的主要方法有:RequestDispatcher.forward()轉(zhuǎn)發(fā)跳轉(zhuǎn),response.sendRedirect()重定向跳轉(zhuǎn)。兩種跳轉(zhuǎn)區(qū)別:(1)客戶端瀏覽器地址欄變化:重定向是通過客戶端重新發(fā)送URL來實現(xiàn),會導(dǎo)致瀏覽器地址更新;而轉(zhuǎn)發(fā)跳轉(zhuǎn)是直接在服務(wù)器端切換程序,目標資源的URL不出現(xiàn)在瀏覽器的地址欄中。4.3response隱含對象(2)request和response資源共享區(qū)別轉(zhuǎn)發(fā)能夠把當前JSP頁面中的request、response對象轉(zhuǎn)發(fā)給目標資源;重定向會導(dǎo)致當前JSP頁面的request、response對象生命期結(jié)束,在目標資源中無法取得上一個JSP頁面的request對象;(3)網(wǎng)絡(luò)時延轉(zhuǎn)發(fā)跳轉(zhuǎn)直接在服務(wù)器端進行,基本上沒有網(wǎng)絡(luò)傳輸時延,重定向有網(wǎng)絡(luò)傳輸時延。4.3response隱含對象如果要實現(xiàn)服務(wù)器中兩個Servlet程序間跳轉(zhuǎn),并且要使用request作用范圍變量交換數(shù)據(jù),應(yīng)該優(yōu)先使用request轉(zhuǎn)發(fā)跳轉(zhuǎn)。用重定向?qū)崿F(xiàn)程序跳轉(zhuǎn)時,如果要求傳遞數(shù)據(jù)給目標資源,一個簡單、可行的方法是把數(shù)據(jù)編碼在URL查詢串中,例如::8080/exam.jsp?name=tom。4.3response隱含對象用response實現(xiàn)重定向,調(diào)用的方法:publicvoidsendRedirect(java.lang.Stringlocation)throwsjava.io.IOException形參是目標資源的URL,可以是相對路徑或絕對路徑。例如:
<%response.sendRedirect(“exam.jsp”)%>4.4application隱含對象一、application作用范圍變量application作用范圍變量能夠被Web應(yīng)用中的所有程序共享。application對象提供的存儲方法有:publicjava.util.EnumerationgetAttributeNames()返回當前上下文中所有可用的appliaction作用范圍變量名,并存儲在枚舉型對象中。4.4application隱含對象2、publicjava.lang.ObjectgetAttribute(java.lang.Stringname)從application作用范圍中讀取指定名字的屬性值。返回的屬性值為Object類型,取到的屬性值一般要進行強制類型轉(zhuǎn)換,還原其原本數(shù)據(jù)類型。如果指定的屬性值對象不存在,則返回null。以下代碼段是遍歷當前Web應(yīng)用中所有的application屬性:4.4application隱含對象3、publicvoidsetAttribute(java.lang.Stringname,java.lang.Objectobject)作用:把一個屬性寫入application作用范圍。參數(shù):第一個形參name是屬性名,第二個形參object是屬性值,它是一個Java對象。如果屬性值object為null,則相當于刪除一個名為name的屬性。如果容器中已存在指定名字的屬性,寫入操作會用當前的屬性值替換原有的屬性值。4.4application隱含對象4、publicvoidremoveAttribute(java.lang.Stringname)作用:從Servlet容器中刪除指定名字的屬性。形參是字符串形式的屬性名。例:用application實現(xiàn)一個簡單的站點計數(shù)器,當訪問JSP頁面時,頁面進行訪問次數(shù)統(tǒng)計,并打印當前計數(shù)值。操作步驟如下:(1)新建JSP文件,使其完成application作用范圍變量的寫入和讀取,4.4application隱含對象(2)啟動Tomcat,預(yù)覽該文件,出現(xiàn)訪問計數(shù)值。當再次打開另一個瀏覽器窗口預(yù)覽該頁面時,會發(fā)現(xiàn)計數(shù)器增加。(3)重啟Tomcat,再訪問jsp,發(fā)現(xiàn)計數(shù)從1開始計數(shù)。原因:application屬性是存儲在Servlet容器中,關(guān)閉Tomcat會導(dǎo)致application屬性丟失,所以計數(shù)器重新計數(shù)。4.4application隱含對象二、application的其它應(yīng)用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隱含對象預(yù)覽后運行結(jié)果為:4.4application隱含對象3、publicjava.lang.StringgetRealPath(java.lang.Stringpath)返回虛擬目錄對應(yīng)的真實絕對路徑,例如:<%out.print(application.getRealPath("/"));%>運行結(jié)果為“……tomcat\webapps\JSP\”。4.5session隱含對象session是指一個終端用戶與后臺某交互式系統(tǒng)進行通信的時間間隔。session通信周期:通常把從登錄進入系統(tǒng)到注銷退出系統(tǒng)之間所經(jīng)歷的時間。如何把一個操作步中產(chǎn)生的有用信息保存下來并進行標識后供后續(xù)的操作步使用稱之為session跟蹤(SessionTracking)問題。4.5session隱含對象一、
用URL重寫實現(xiàn)session跟蹤URL重寫(URLRewriting)就是把session數(shù)據(jù)編碼成“name=value”對,當作URL的查詢串附在URL后,用帶有查詢串的URL訪問下一個目標資源時,附在URL查詢串中的session數(shù)據(jù)自然被傳送給下一頁。4.5session隱含對象例如,當前的a.jsp頁面中程序產(chǎn)生了一個session數(shù)據(jù)“status=90”,現(xiàn)要重定向至:8080/k.jsp,并且k.jsp要用到“status=90”這個session數(shù)據(jù),則新的URL為::8080/k.jsp?status=90在a.jsp中產(chǎn)生此URL的代碼為:4.5session隱含對象例:寫一個簡單的登錄頁面,效果如圖示。4.5session隱含對象(1)新建JSP文件(2)設(shè)計如上圖所示的表單,用戶名文本域的名字為“userName”,口令文本域的名字為“pw”,類型取值為“密碼”,整個表單提交給自己。(3)在</body>標記前一行錄入如下代碼,實現(xiàn)登錄驗證和重定向4.5session隱含對象(4)再新建一個JSP文件,在<body></body>標記中錄入以下代碼,實現(xiàn)session信息的讀取與驗證,并動態(tài)生成十個超鏈接。4.5session隱含對象(5)啟動Tomcat,預(yù)覽第一個頁面,輸入幾個非法用戶名或口令,均無法成功登錄,輸入合法數(shù)據(jù)后后,登錄成功,并轉(zhuǎn)至第二個頁面。在其中,單擊10個超鏈接,發(fā)現(xiàn)URL上均帶有兩個session數(shù)據(jù)。4.5session隱含對象二、
用cookie實現(xiàn)session跟蹤用cookie實現(xiàn)session跟蹤的基本原理是:把一個session數(shù)據(jù)封裝在一個cookie對象中,將cookie對象傳回客戶端存儲,需要用到時用代碼從客戶端讀回。例:題目同前例,此處要求用cookie保存用戶成功登錄的session數(shù)據(jù)“name=tom”。只需要修改兩個頁面中的代碼即可。(1)對第一個jsp頁面,只需要修改它的JSP代碼(2)對第二個jsp:4.5session隱含對象三、
用隱藏表單域?qū)崿F(xiàn)session跟蹤隱藏表單域在頁面上不可視,它相當于一個變量,如果把一個session數(shù)據(jù)存儲在其中,則提交表單時,隱藏表單域中的數(shù)據(jù)也會被提交給服務(wù)器。例:設(shè)計一個JSP頁面實現(xiàn)猜數(shù)游戲,如下圖示,首次啟動頁面時會產(chǎn)生一個0~100間的整數(shù)讓用戶猜。用戶在表單中輸入數(shù)據(jù),提交后頁面判斷是否正確,如果猜小了或猜大了則給出提示,如果猜中,則顯示目標數(shù)據(jù)和用戶輸入的數(shù)據(jù)。頁面還顯示用戶總共猜了多少次。4.5session隱含對象操作步驟如下:(1)新建JSP文件。(2)切換到代碼視圖,找到<form>標記,在它前面輸入如下代碼:4.5session隱含對象(3)啟動Tomcat,預(yù)覽本頁,出現(xiàn)了前圖中的猜數(shù)游戲,實現(xiàn)了用隱藏表單域保存session數(shù)據(jù)。注:隱藏域有一定的安全缺陷,例如運行該頁面,通過IE瀏覽器的菜單【查看】→【源文件】,可查看到隱藏表單域的HTML代碼及其取值。4.5session隱含對象四、session作用范圍變量與session跟蹤session隱含對象由Web服務(wù)器創(chuàng)建,并存儲在服務(wù)器端,功能強大,實現(xiàn)session跟蹤最直接的方法。在后續(xù)的學(xué)習(xí)中,提到“session”時,如果不特別說明,就是指session對象。session作用范圍變量也叫session屬性。4.5session隱含對象1、publicbooleanisNew()作用:判斷session對象是新創(chuàng)建的,還是已經(jīng)存在。返回true時,表示session對象是剛創(chuàng)建的,也表示本次客戶端發(fā)出的請求是本次session通信的第一次請求。注:不過并不表示客戶端瀏覽器窗口是新打開的。例:在前面我們接觸過一個站點計數(shù)器,但那個計數(shù)存在一個缺陷,刷新當前窗口時計數(shù)器的值會增加,這是不合理的。現(xiàn)在用session.isNew()來修訂這個缺陷,防止刷新窗口時計數(shù)值增加。原理是:isNew()方法返回true值時,表示這是一次新的訪問,此時允許計數(shù)器加1計數(shù)。則代碼修改:4.5session隱含對象2、publicjava.lang.StringgetId()作用:返回當前session對象的ID號例:通過session對象的ID號理解JSP服務(wù)器識別session客戶端的方法。操作步驟如下:(1)新建JSP文件,在<body></body>中輸入以下代碼:(2)啟動Tomcat,打開兩個IE瀏覽器窗口,瀏覽器上顯示的一串字符串就是隨機生成的sessionID號,兩個瀏覽器窗口中顯示的ID號均不相同。說明在不同的瀏覽器窗口表示不同的客戶端。4.5session隱含對象3、publiclonggetLastAccessedTime()作用:返回客戶端最后一次請求的發(fā)送時間。返回值是一個long型的整數(shù),單位毫秒,是從格林威治時間1970-1-100:00:00到當前所經(jīng)歷的毫秒數(shù)。例:以下代碼取得session通信中最后一次請求時間:4.5session隱含對象4、publicvoidinvalidate()使當前session無效,session作用范圍變量也會隨之丟失。5、publicvoidsetMaxInactiveInterval(intinterval)形參是一個整數(shù),定義session對象的超時時間,單位秒。作用:如果客戶端從最后一次請求開始,在連續(xù)的interval秒內(nèi)一直沒有再向服務(wù)器發(fā)送HTTP請求,則服務(wù)器認為session超時,將刪除本次的session對象。注:如果超時時間為負數(shù),表示永不超時。4.5session隱含對象6、publicintgetMaxInactiveInterval()讀取當前的session超時時間,單位秒。7、publicvoidsetAttribute(java.lang.Stringname,java.lang.Objectvalue)定義session作用范圍變量,第一個形參name是session作用范圍變量名,第二個形參value是session屬性。如果value為null,則表示取消session屬性和session的綁定關(guān)系。4.5session隱含對象8、publicjava.lang.ObjectgetAttribute(java.lang.Stringname)讀取一個session作用范圍變量,返回一個Object類型的對象,如果找不到指定名字的數(shù)據(jù)對象,則返回null。返回值需要進行強制類型轉(zhuǎn)換,才能參與數(shù)據(jù)處理。4.5session隱含對象9、publicjava.util.EnumerationgetAttributeNames()將當前合法的所有session作用范圍變量名讀到一個枚舉型對象中。10、publicvoidremoveAttribute(java.lang.Stringname)解除指定名字的數(shù)據(jù)對象與session的綁定關(guān)系,即刪除一個指定名字的session屬性。4.5session隱含對象例:用session保存前例
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025伸縮縫安裝工程勞務(wù)分包合同修改
- 9 知法守法依法維權(quán) 第二課時(說課稿)-2023-2024學(xué)年道德與法治六年級上冊統(tǒng)編版001
- 2023二年級數(shù)學(xué)上冊 六 表內(nèi)乘法和表內(nèi)除法(二)練習(xí)十四說課稿 蘇教版001
- 10《爬山虎的腳》第二課時 說課稿-2024-2025學(xué)年語文四年級上冊統(tǒng)編版
- Unit 3 My weekend plan Part 6(說課稿)-2024-2025學(xué)年人教PEP版英語六年級上冊
- 生了病怎么辦 (課件)-2024-2025學(xué)年人教版(2024)體育一年級全一冊
- Review Module Unit 1(說課稿)-2023-2024學(xué)年外研版(三起)英語四年級下冊
- 17《松鼠》說課稿-2024-2025學(xué)年五年級語文上冊統(tǒng)編版001
- 2025農(nóng)村宅基地轉(zhuǎn)讓合同模板
- 8網(wǎng)絡(luò)新世界 第一課時 說課稿-2023-2024學(xué)年道德與法治四年級上冊統(tǒng)編版
- GB 4793-2024測量、控制和實驗室用電氣設(shè)備安全技術(shù)規(guī)范
- 重大火災(zāi)隱患判定方法
- 挖掘機售后保養(yǎng)及維修服務(wù)協(xié)議(2024版)
- 2024年電工(高級技師)考前必刷必練題庫500題(含真題、必會題)
- 公司組織架構(gòu)與管理體系制度
- 2024-2030年中國涂碳箔行業(yè)現(xiàn)狀調(diào)查與投資策略分析研究報告
- 2024-2030年中國派對用品行業(yè)供需規(guī)模調(diào)研及發(fā)展趨勢預(yù)測研究報告
- 2023-2024年度數(shù)字經(jīng)濟與驅(qū)動發(fā)展公需科目答案(第5套)
- 工傷保險代理委托書
- 職業(yè)分類表格
- 廣東省深圳高級中學(xué)2023-2024學(xué)年八年級下學(xué)期期中考試物理試卷
評論
0/150
提交評論