第四章 JSP隱含對(duì)象_第1頁
第四章 JSP隱含對(duì)象_第2頁
第四章 JSP隱含對(duì)象_第3頁
第四章 JSP隱含對(duì)象_第4頁
第四章 JSP隱含對(duì)象_第5頁
已閱讀5頁,還剩127頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

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

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

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

<%out.close();out.flush(); %>4.1out隱含對(duì)象2、clear()方法clear()表示清除緩沖區(qū)中的信息。如果緩沖區(qū)是空的,執(zhí)行此方法會(huì)引發(fā)IOException異常。3、clearBuffer()clearBuffer()的功能與clear()相似,它將輸出緩沖區(qū)清除后返回,與clear()不同的是它不拋出異常。4.1out隱含對(duì)象4、getBufferSize()getBufferSize()返回輸出緩沖區(qū)的大小,單位字節(jié),如果沒有緩沖區(qū),則返回0。5、getRemaining()getRemaining()返回緩沖區(qū)剩余的空閑空間,單位字節(jié)。6、isAutoFlush()isAutoFlush()返回一個(gè)真假值,用于標(biāo)示緩沖區(qū)是否自動(dòng)刷新。4.1out隱含對(duì)象預(yù)覽后,顯示的信息為:緩沖區(qū)總?cè)萘?8192

緩沖區(qū)空閉容量=7883

緩沖區(qū)是否自動(dòng)刷新=true<%out.print("緩沖區(qū)總?cè)萘?"+out.getBufferSize()+"<br>");out.print("緩沖區(qū)空閉容量="+out.getRemaining()+"<br>");out.print("緩沖區(qū)是否自動(dòng)刷新="+out.isAutoFlush());%>Web工作模式請(qǐng)求-響應(yīng)模式。客戶端(瀏覽器)向服務(wù)器發(fā)出HTTP請(qǐng)求。在HTTP請(qǐng)求中包含傳遞到服務(wù)器的數(shù)據(jù)。Web服務(wù)器接收到請(qǐng)求,對(duì)請(qǐng)求進(jìn)行處理Web服務(wù)器通過HTTP向客戶端發(fā)送響應(yīng)??蛻舳私邮盏巾憫?yīng)后,進(jìn)行顯示或跳轉(zhuǎn)。4.2request隱含對(duì)象HTTP請(qǐng)求中包含的信息:請(qǐng)求頭(RequestHeader):指示客戶端信息和請(qǐng)求體信息。請(qǐng)求頭功能:向服務(wù)器指示客戶端和請(qǐng)求體的基本信息,便于服務(wù)器采用不同的處理。請(qǐng)求頭包含的主要信息:

-請(qǐng)求的協(xié)議。

-瀏覽器使用的語言。

-瀏覽器字符編碼。

-請(qǐng)求數(shù)據(jù)的大小(content-length).

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

-文本類型:

1)GET請(qǐng)求

2)不包含文件的POST請(qǐng)求

-二進(jìn)制類型:

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

-取得客戶端請(qǐng)求頭信息,即客戶端信息

-取得客戶端請(qǐng)求體信息,即客戶提交的數(shù)據(jù)

-傳遞不同請(qǐng)求之間的共享信息(只能使用在轉(zhuǎn)發(fā)情況)。request的生命周期請(qǐng)求對(duì)象的生成:

(1)請(qǐng)求對(duì)象在Web容器接收到HTTP請(qǐng)求后自動(dòng)創(chuàng)建。

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

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

(4)Servlet可以通過請(qǐng)求對(duì)象取得客戶提交的數(shù)據(jù)請(qǐng)求對(duì)象的銷毀:當(dāng)Web響應(yīng)HTTP請(qǐng)求結(jié)束后,請(qǐng)求對(duì)象自動(dòng)銷毀,被垃圾收集器收集,釋放所占的內(nèi)存。4.2request隱含對(duì)象一、

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

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

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

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

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

您已經(jīng)登錄,用戶名=John

您最近瀏覽過的圖書書號(hào)是:AB001,KC981,DE345,RD332,PC6674.3response隱含對(duì)象一、

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

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

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

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

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

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

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論