第4章 JSP 內(nèi)置對(duì)象_第1頁(yè)
第4章 JSP 內(nèi)置對(duì)象_第2頁(yè)
第4章 JSP 內(nèi)置對(duì)象_第3頁(yè)
第4章 JSP 內(nèi)置對(duì)象_第4頁(yè)
第4章 JSP 內(nèi)置對(duì)象_第5頁(yè)
已閱讀5頁(yè),還剩37頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第4章JSP內(nèi)置對(duì)象主要內(nèi)容request對(duì)象response對(duì)象

session對(duì)象out對(duì)象application對(duì)象難點(diǎn)理解session對(duì)象使用session對(duì)象存儲(chǔ)數(shù)據(jù)關(guān)鍵實(shí)踐計(jì)算器成績(jī)與餅圖記憶測(cè)試4.1request對(duì)象HTTP通信協(xié)議是用戶(hù)與服務(wù)器之間一種提交(請(qǐng)求)信息與響應(yīng)信息(request/response)的通信協(xié)議。在JSP中,內(nèi)置對(duì)象request封裝了用戶(hù)提交的信息,那么該對(duì)象調(diào)用相應(yīng)的方法可以獲取封裝的信息,即使用該對(duì)象可以獲取用戶(hù)提交的信息。內(nèi)置對(duì)象request對(duì)象是實(shí)現(xiàn)了ServletRequest接口類(lèi)的一個(gè)實(shí)例,可以在Tomcat服務(wù)器的webapps\tomcat-docs\servletapi中查找ServletRequest接口的方法4.1.1獲取用戶(hù)提交的信息■用戶(hù)通常使用HTML的form表單:<formaction="請(qǐng)求訪(fǎng)問(wèn)的頁(yè)面或Servlet"method=get|post>

提交手段</form>例如:<formaction="tom.jsp"method="post"><inputtype="text"name="boy"value="ok"/><inputtype="submit"name="submit"value="提交"/></form>請(qǐng)求服務(wù)器上的資源并提交信息。4.1request對(duì)象4.1.1獲取用戶(hù)提交的信息■request對(duì)象獲取用戶(hù)提交信息的最常用的方法是getParameter(Strings)例子4_1中,example4_1.jsp通過(guò)表單向example4_1_computer.jsp提交三角形三邊的長(zhǎng)度,example4_1_computer.jsp負(fù)責(zé)計(jì)算并顯示三角形的面積。例子4_1example4_1.jspexample4_1_computer.jsp4.1request對(duì)象4.1.1獲取用戶(hù)提交的信息■request對(duì)象獲取用戶(hù)提交信息的最常用的方法是getParameter(Strings)例子4_2中,example4_2.jsp通過(guò)表單向當(dāng)前頁(yè)面提交購(gòu)物小票,當(dāng)前頁(yè)面自己負(fù)責(zé)計(jì)算購(gòu)物小票的價(jià)格總和。如果form表單中的action請(qǐng)求的頁(yè)面是當(dāng)前頁(yè)面,可以用雙引號(hào)""或單引號(hào)代替當(dāng)前頁(yè)面,即寫(xiě)成action=""或action='',注意雙引號(hào)或單引號(hào)中不能含有空格。也可省略action參數(shù),即不顯式寫(xiě)出action參數(shù)。例子4_2example4_2.jsp4.1request對(duì)象4.1.1獲取用戶(hù)提交的信息■request對(duì)象獲取用戶(hù)提交信息的最常用的方法是getParameter(Strings)使用request對(duì)象獲取當(dāng)前頁(yè)面提交的信息時(shí)要格外小心,在上面的例子4_2中,當(dāng)用戶(hù)在瀏覽器中輸入頁(yè)面地址請(qǐng)求頁(yè)面時(shí),用戶(hù)還沒(méi)有機(jī)會(huì)提交數(shù)據(jù),那么頁(yè)面在執(zhí)行StringshoppingReceipt=request.getParameter("shopping");時(shí)得到的shoppingReceipt就是空對(duì)象。如果程序使用了空對(duì)象,Java解釋器就會(huì)提示出現(xiàn)了NullPointerException異常。因此,在上述例子2中為了避免在運(yùn)行時(shí)出現(xiàn)NullPointerException異常,使用了如下代碼:StringshoppingReceipt=request.getParameter("shopping");if(shoppingReceipt==null){shoppingReceipt="0";}4.1request對(duì)象4.1.2處理漢字信息用戶(hù)提交的信息中如果含有漢字字符或其他非ASCII字符的信息,就必須進(jìn)行特殊的處理方式,防止出亂碼現(xiàn)象?!裉幚頋h字信息JSP頁(yè)面文件的編碼為utf-8編碼。內(nèi)置對(duì)象request在獲取信息之前調(diào)用setCharacterEncoding方法設(shè)置編碼為utf-8(默認(rèn)是iso-8859-1)就可以避免亂碼現(xiàn)象代碼如下:request.setCharacterEncoding("utf-8");4.1request對(duì)象4.1.2處理漢字信息例子4_3中example4_3.jsp通過(guò)表單向自己提交不同語(yǔ)言的問(wèn)候語(yǔ),內(nèi)置對(duì)象request在獲取信息之前調(diào)用setCharacterEncoding方法設(shè)置編碼為utf-8,然后再獲取數(shù)據(jù)。例子4_3example4_3.jsp4.1request對(duì)象4.1.3常用方法舉例request的getParameter方法獲取form表單提交的有關(guān)信息,但實(shí)際上,request對(duì)象調(diào)用相關(guān)方法可以獲取請(qǐng)求的許多細(xì)節(jié)信息。內(nèi)置對(duì)象request常用方法如下:1)StringgetProtocol()獲取用戶(hù)向服務(wù)器提交信息所使用的通信協(xié)議,比如http/1.1等。2)StringgetServletPath()獲取用戶(hù)請(qǐng)求的JSP頁(yè)面文的名字(帶目錄符號(hào)\,例如\hello.jsp)。3)StringgetContextPath()獲取用戶(hù)請(qǐng)求的當(dāng)前Web服務(wù)目錄(例如ch4)。4)intgetContentLength()獲取用戶(hù)提交的整個(gè)信息的長(zhǎng)度。5)StringgetMethod()獲取用戶(hù)提交信息的方式,比如:post或get.6)StringgetRemoteAddr()獲取用戶(hù)的IP地址。7)StringgetRemoteHost()獲取用戶(hù)機(jī)的名稱(chēng)(如果獲取不到,就獲取IP地址)。8)StringgetServerName()獲取服務(wù)器的名稱(chēng)。9)StringgetServerPort()獲取服務(wù)器的端口號(hào)。4.1request對(duì)象4.1.3常用方法舉例request對(duì)象調(diào)用相關(guān)方法可以獲取請(qǐng)求的許多細(xì)節(jié)信息。例子4_4使用了request的一些常用方法.例子4_4example4_4.jsp4.1request對(duì)象4.1.4處理HTML標(biāo)記(不區(qū)分大小寫(xiě))1.form標(biāo)記(form表單)<formaction="請(qǐng)求訪(fǎng)問(wèn)的頁(yè)面或servlet"method=get|post>

各種提交手段提交鍵</form>例如:<formaction="tom.jsp"method="post"><inputtype="text"name="boy"value="ok"/><inputtype="submit"name="submit"value="提交"/></form>form表單標(biāo)記經(jīng)常將下列標(biāo)記作為form表單的子標(biāo)記,以便提供提交數(shù)據(jù)的手段,這些標(biāo)記都以GUI形式出現(xiàn),方便用戶(hù)輸入或選擇數(shù)據(jù),比如,文本框、下拉列表、滾動(dòng)列表等。<input…../><select…></select><option…..></option><textArea….></textArea>4.1request對(duì)象4.1.4處理HTML標(biāo)記(不區(qū)分大小寫(xiě))2.input標(biāo)記<inputtype="GUI對(duì)象"name="GUI對(duì)象的名子"value="GUI中的默認(rèn)值"/>■Tom服務(wù)器的內(nèi)置對(duì)象request通過(guò)name指定的名字來(lái)獲取GUI對(duì)象中提交的數(shù)據(jù).(1)文本框text<inputtype="text"name="m"value="h"size="8"algin="left"maxlength="9"/>如果用戶(hù)沒(méi)有在text輸入任何信息,就單擊form表單中的submit提交鍵,request對(duì)象調(diào)用getParameter方法將獲取由value指定的默認(rèn)值(text中顯示的默認(rèn)值),如果value未指定任何值,getParameter方法獲取的字符串的長(zhǎng)度為0,即該字符串為""。4.1request對(duì)象4.1.4處理HTML標(biāo)記(不區(qū)分大小寫(xiě))2.input標(biāo)記<inputtype="GUI對(duì)象"name="GUI對(duì)象的名子"value="GUI中的默認(rèn)值"/>■Tom服務(wù)器的內(nèi)置對(duì)象request通過(guò)name指定的名字來(lái)獲取GUI對(duì)象中提交的數(shù)據(jù).(2)單選框radio<inputtype="radio"name="hi"value="男"algin="top"checked="ok"/>男生<inputtype="radio"name="hi"value="女"algin="top"/>女生其中value指定radio的值,如果幾個(gè)單選鍵的name取值相同,那么同一時(shí)刻只能有一個(gè)被選中。request對(duì)象調(diào)用getParameter方法獲取被選中的radio中value屬性指定的值。checked如果取值是一個(gè)非空的字符串,那么該單選框的初始狀態(tài)就是選中狀態(tài)。

<inputtype="radio"name="R"value="on"/>打開(kāi)

<inputtype="radio"name="R"value="off"checked="default">關(guān)閉4.1request對(duì)象4.1.4處理HTML標(biāo)記(不區(qū)分大小寫(xiě))2.input標(biāo)記<inputtype="GUI對(duì)象"name="GUI對(duì)象的名子"value="GUI中的默認(rèn)值"/>■Tom服務(wù)器的內(nèi)置對(duì)象request通過(guò)name指定的名字來(lái)獲取GUI對(duì)象中提交的數(shù)據(jù).(3)復(fù)選框checkbox<inputtype="checkbox"name="item"value="A"algin="top"checked="ok"/>足球<inputtype="checkbox"name="item"value="B"algin="top"/>圍棋<inputtype="checkbox"name="item"value="C"algin="top"checked="ok"/>乒乓球<inputtype="checkbox"name="item"value="D"algin="top"/>籃球其中value指定checkbox的值。復(fù)選框與單選框的區(qū)別就是可以多選,即如果幾個(gè)checkbox的name取值相同,那么同一時(shí)刻可有多個(gè)chekbox被選中。這時(shí),request對(duì)象需調(diào)用getParameterValues方法(不是getParameter方法)獲取被選中的多個(gè)checkbox中value屬性指定的值。checked如果取值是一個(gè)非空的字符串,那么該復(fù)選框的初始狀態(tài)就是選中狀態(tài)。4.1request對(duì)象4.1.4處理HTML標(biāo)記(不區(qū)分大小寫(xiě))2.input標(biāo)記<inputtype="GUI對(duì)象"name="GUI對(duì)象的名子"value="GUI中的默認(rèn)值"/>■Tom服務(wù)器的內(nèi)置對(duì)象request通過(guò)name指定的名字來(lái)獲取GUI對(duì)象中提交的數(shù)據(jù).(4)口令框password<inputtype="password"name="me"size="12"maxlength="30"/>用戶(hù)在口令框中輸入tiger,單擊提交鍵,tiger將被提交給form表單請(qǐng)求的頁(yè)面,請(qǐng)求的頁(yè)面的內(nèi)置對(duì)象request調(diào)用getParameter方法獲取password提交的值tiger(password僅僅起著不讓別人偷看的作用,不提供加密措施)。(5)隱藏hidden<inputtype="hidden"name="nogui"value="hello"/>用戶(hù)單擊form表單中的submit提交鍵,那么form表單所請(qǐng)求的頁(yè)面的內(nèi)置對(duì)象request調(diào)用getParameter方法將獲取由value指定的值hello。4.1request對(duì)象4.1.4處理HTML標(biāo)記(不區(qū)分大小寫(xiě))2.input標(biāo)記<inputtype="GUI對(duì)象"name="GUI對(duì)象的名子"value="GUI中的默認(rèn)值"/>■Tom服務(wù)器的內(nèi)置對(duì)象request通過(guò)name指定的名字來(lái)獲取GUI對(duì)象中提交的數(shù)據(jù).(6)提交鍵submit為了能把form表單的數(shù)據(jù)提交給服務(wù)器,一個(gè)form表單至少包含一個(gè)提交鍵(可以有多個(gè)提交鍵,見(jiàn)稍后的例子10),例如:<inputtype="submit"name="me"value="確定"size="12"/>單擊提交鍵后,form表單請(qǐng)求的頁(yè)面才有機(jī)會(huì)獲取form表單提交的各個(gè)數(shù)據(jù)。(7)重置鍵:reset重置鍵將表單中輸入的數(shù)據(jù)清空,以便重新輸入數(shù)據(jù),例如:<inputtype="reset"value="重置"/>4.1request對(duì)象4.1.4處理HTML標(biāo)記(不區(qū)分大小寫(xiě))2.input標(biāo)記例子4_5中JSP頁(yè)面example4_5.jsp用form表單向example4_5_receive.jsp提交數(shù)據(jù),example4_5_receive.jsp使用request對(duì)象獲得example4_5.jsp提交的數(shù)據(jù).例子4_5example4_5.jspexample4_5_receive.jsp4.1request對(duì)象4.1.4處理HTML標(biāo)記(不區(qū)分大小寫(xiě))3.select、option標(biāo)記(下拉列表或滾動(dòng)列表)■Tom服務(wù)器的內(nèi)置對(duì)象request通過(guò)name指定的名字來(lái)獲取GUI對(duì)象中提交的數(shù)據(jù).<selectname="myName">

<optionvalue="item1">文本描述</option><optionvalue="item2">文本描述</option>……</select>例子6中用戶(hù)通過(guò)下拉列表為當(dāng)前頁(yè)面選擇一首音樂(lè)、通過(guò)滾動(dòng)列表為當(dāng)前頁(yè)面選擇一幅圖像。例子4_6example4_6.jsp4.1request對(duì)象4.1.4處理HTML標(biāo)記(不區(qū)分大小寫(xiě))4.textArea標(biāo)記■Tom服務(wù)器的內(nèi)置對(duì)象request通過(guò)name指定的名字來(lái)獲取GUI對(duì)象中提交的數(shù)據(jù).<textAreaname="名字"rows="文本可見(jiàn)行數(shù)"cols="文本可見(jiàn)列數(shù)">

提交或顯示的數(shù)據(jù)</textArea>5.style樣式標(biāo)記style標(biāo)記可用于定義HTML其他標(biāo)記中的字體樣式,如,style標(biāo)記給出樣式:<style>#textStyle{font-family:宋體;font-size:18;color:blue}#tom{font-family:黑體;font-size:16;color:black}</style>4.1request對(duì)象4.1.4處理HTML標(biāo)記(不區(qū)分大小寫(xiě))5.style樣式標(biāo)記其中,#字符之后的字符序列是樣式名稱(chēng),例如#textStyle給出的樣式名稱(chēng)是textStyle(起一個(gè)自己喜歡且容易理解的名字),其它html標(biāo)記可以讓其id屬性值是樣式名稱(chēng)來(lái)使用這個(gè)樣式。例如,段落標(biāo)記p就可以如下使用textStyle樣式:<pid="textStyle">你好</p>textArea標(biāo)記如下使用tom樣式:<textAreaname="english"id="tom"rows=5cols=38>大家好</textArea>input標(biāo)記如下使用textStyle樣式:<inputtype="submit"name="submit"id="textStyle"value="提交"/>4.1request對(duì)象4.1.4處理HTML標(biāo)記(不區(qū)分大小寫(xiě))6.table標(biāo)記(主要用于顯示數(shù)據(jù),不能提交數(shù)據(jù))<tableborder="邊框的寬度"><trwidth="該行的寬度"><thwidth="單元格的寬度">單元格中的數(shù)據(jù)</th>…<tdwidth="單元格的寬度">單元格中的數(shù)據(jù)</td>…</tr>…….</table>4.1request對(duì)象4.1.4處理HTML標(biāo)記(不區(qū)分大小寫(xiě))6.table標(biāo)記(主要用于顯示數(shù)據(jù),不能提交數(shù)據(jù))例子4_7中用戶(hù)在example4_7.jsp輸入年份和月份提交給example4_7_showCalendar.jsp,example4_7_showCalendar.jsp用table顯示日歷。例子7example4_7.jspexample4_7_showCalendar.jsp4.1request對(duì)象4.1.4處理HTML標(biāo)記(不區(qū)分大小寫(xiě))8.embed標(biāo)記7.<image>標(biāo)記不能用于提交數(shù)據(jù),用于顯示圖像。<imagesrc="圖像文件的URL">描述文字</image>不能用于提交數(shù)據(jù)。使用embed標(biāo)記可以播放音樂(lè)和視頻,當(dāng)瀏覽器執(zhí)行該標(biāo)記時(shí),會(huì)把瀏覽器所在機(jī)器上的默認(rèn)播放器嵌入到瀏覽器中,以便播放音樂(lè)或視頻文件。embed標(biāo)記的基本格式為:<embedsrc="音樂(lè)或視頻文件的URL">描述文字</embed>或<embedsrc="音樂(lè)或視頻文件的URL"/>4.1request對(duì)象4.1.4處理HTML標(biāo)記(不區(qū)分大小寫(xiě))例子4_8中example4_8.jsp頁(yè)面使用image標(biāo)記顯示一幅圖像,用戶(hù)使用下拉列表選擇要播放視頻提交給example4_8_play_mp4.jsp,example4_8_play_mp4.jsp頁(yè)面使用embed標(biāo)記播放用戶(hù)選擇的視頻。例子8example4_8.jspexample4_8_play_mp4.jsp4.1request對(duì)象4.1.4處理HTML標(biāo)記(不區(qū)分大小寫(xiě))9.屬性值格式的說(shuō)明許多HTML標(biāo)記的中都有屬性,并指定屬性的值,例如:<inputtype="text"name="testAmount"value=10/>中的type,name,value都是input標(biāo)記的屬性,屬性值可以用雙引號(hào)括起,也可以用單引號(hào)括起,或者不用任何符號(hào).

比如type屬性的值可以用雙引號(hào)括起"text",也可以用單引號(hào)括起'text'或者不用任何符號(hào)text,一個(gè)好的習(xí)慣是用單引號(hào)括起。例如,下列超鏈接標(biāo)記中的href的屬性值用單引號(hào)括起。<ahref=’example4_1.jsp’>超鏈接</a>4.1request對(duì)象4.1.5處理超鏈接超鏈接標(biāo)記<ahref=鏈接的頁(yè)面地址>文字說(shuō)明</a>是一個(gè)常用標(biāo)記。例如:<ahref="example4_9_receive.jsp>購(gòu)買(mǎi)</a>用戶(hù)單擊超鏈接標(biāo)記的文字說(shuō)明,可以訪(fǎng)問(wèn)超鏈接給出的鏈接頁(yè)面。使用超鏈接標(biāo)記時(shí)還可以增加參數(shù),以便向所鏈接的頁(yè)面?zhèn)鬟f值,格式如下:<ahref=鏈接的頁(yè)面地址?參數(shù)1=字符串1&參數(shù)2=字符串2…>文字說(shuō)明</a>例如:<ahref="example4_9_receive.jsp?id=A1001&price=8765">購(gòu)買(mǎi)</a>超鏈接所鏈接的頁(yè)面,使用request調(diào)用getParameter("參數(shù)")獲得超鏈接的參數(shù)傳遞過(guò)來(lái)的參數(shù)的值,即字符串。例如:StringidStr=request.getParameter("id");需要注意的是,超鏈接標(biāo)記向所鏈接的頁(yè)面?zhèn)鬟f的參數(shù)的值,即字符串中不允許含有非ASCII字符(例如漢字等)。4.1request對(duì)象4.1.5處理超鏈接例子4_9中example4_9.jsp用超鏈接向example4_9_receive.jsp傳遞商品的編號(hào)和價(jià)格。例子9example4_9.jspexample4_9_receive.jsp4.2response對(duì)象4.2.1動(dòng)態(tài)響應(yīng)contentType屬性與request對(duì)象相對(duì)應(yīng)的對(duì)象是response對(duì)象。可以用response對(duì)象對(duì)用戶(hù)的請(qǐng)求作出動(dòng)態(tài)響應(yīng),向用戶(hù)端發(fā)送數(shù)據(jù)。■頁(yè)面用page指令設(shè)置頁(yè)面的contentType屬性的值,那么Tomcat服務(wù)器將按著這種屬性值作出響應(yīng),將頁(yè)面的靜態(tài)部分返回給用戶(hù),用戶(hù)瀏覽器接收到該響應(yīng)就會(huì)使用相應(yīng)的手段處理所收到的信息?!鰌age指令只能為contentType指定一個(gè)值來(lái)決定響應(yīng)的MIME類(lèi)型,如果想動(dòng)態(tài)的改變這個(gè)屬性的值來(lái)響應(yīng)用戶(hù),就需要使用response對(duì)象的setContentType(Strings)方法來(lái)改變contentType的屬性值■當(dāng)用setContentType(Strings)方法動(dòng)態(tài)改變了contentType的屬性值,即響應(yīng)的MIME類(lèi)型,Tomcat服務(wù)器就會(huì)按著新的MIME類(lèi)型將JSP頁(yè)面的輸出結(jié)果返回給用戶(hù)。4.2response對(duì)象4.2.1動(dòng)態(tài)響應(yīng)contentType屬性例子10中用戶(hù)在example4_10.jsp頁(yè)面輸入圓半徑,然后單擊名字“提交看面積”提交鍵,請(qǐng)求訪(fǎng)問(wèn)example4_10_show.jsp頁(yè)面,該頁(yè)面顯示圓的面積。但是,如果用戶(hù)輸入圓半徑單擊名字“提交看圓形”提交鍵,那么example4_10_show.jsp的內(nèi)置對(duì)象response將默認(rèn)的MIME類(lèi)型text/html改變成image/jpeg,以便用戶(hù)的瀏覽器啟用相應(yīng)的圖形解碼器顯示服務(wù)器發(fā)來(lái)的圖形。例子10example4_10.jspexample4_10_show.jsp4.2response對(duì)象4.2.2response的HTTP文件頭response對(duì)象可以使用方法addHeader(Stringhead,Stringvalue);或setHeader(Stringhead,Stringvalue);動(dòng)態(tài)添加新的響應(yīng)頭和頭的值,將這些頭發(fā)送給用戶(hù)的瀏覽器。如果添加的頭已經(jīng)存在,則先前的頭被覆蓋例子11中,response對(duì)象添加一個(gè)響應(yīng)頭refresh,其頭值是5。那么用戶(hù)收到這個(gè)頭之后,5秒鐘后將再次刷新該頁(yè)面,導(dǎo)致該網(wǎng)頁(yè)每5秒刷新一次.例子11example4_11.jsp4.2response對(duì)象4.2.3response重定向■response的sendRedirect(URLurl)方法實(shí)現(xiàn)用戶(hù)的重定向,即讓用戶(hù)從一個(gè)頁(yè)面跳轉(zhuǎn)到sendRedirect(URL:url)中url指定的頁(yè)面。■當(dāng)使用sendRedirect(URLurl)方法將用戶(hù)從當(dāng)前頁(yè)面重定向另一個(gè)頁(yè)面時(shí),Tomcat服務(wù)器還是要把當(dāng)前JSP頁(yè)面執(zhí)行完畢后才實(shí)施重定向(跳轉(zhuǎn))操作,但Tomcat服務(wù)器不再給用戶(hù)看當(dāng)前頁(yè)面的執(zhí)行效果?!鋈绻趫?zhí)行sendRedirect(URLurl)方法后,緊接著執(zhí)行了return返回語(yǔ)句,那么Tomcat服務(wù)器會(huì)立刻結(jié)束當(dāng)前JSP頁(yè)面的執(zhí)行。例子12中,用戶(hù)在example4_12.jsp頁(yè)面的form表單中輸入姓名提交給example4_12_receive.jsp頁(yè)面,如果未輸入姓名就提交form表單就會(huì)重新定向到example4_12.jsp頁(yè)面。例子12example4_12.jsp4.3session對(duì)象HTTP協(xié)議是一種無(wú)狀態(tài)協(xié)議。一個(gè)用戶(hù)向服務(wù)器發(fā)出請(qǐng)求(request),然后服務(wù)器返回響應(yīng)(response),在服務(wù)器端不保留用戶(hù)的有關(guān)信息,因此當(dāng)下一次發(fā)出請(qǐng)求時(shí),服務(wù)器無(wú)法判斷這一次請(qǐng)求和以前的請(qǐng)求是否屬于同一用戶(hù)?!颰omcat服務(wù)器可以使用內(nèi)置session對(duì)象(會(huì)話(huà))記錄用戶(hù)的信息。內(nèi)置對(duì)象session由Tomcat服務(wù)器負(fù)責(zé)創(chuàng)建.4.3session對(duì)象4.3.1session對(duì)象的id■當(dāng)一個(gè)用戶(hù)首次訪(fǎng)問(wèn)web服務(wù)目錄中的一個(gè)JSP頁(yè)面時(shí),Tomcat服務(wù)器產(chǎn)生一個(gè)session對(duì)象,這個(gè)session對(duì)象調(diào)用相應(yīng)的方法可以存儲(chǔ)用戶(hù)在訪(fǎng)問(wèn)該web服務(wù)目錄中各個(gè)頁(yè)面期間提交的各種信息。■這個(gè)session對(duì)象被分配了一個(gè)String類(lèi)型的id號(hào),Tomcat服務(wù)器同時(shí)將這個(gè)id號(hào)發(fā)送到用戶(hù)端,存放在用戶(hù)(瀏覽器)的Cookie中。這樣,session對(duì)象和用戶(hù)之間就建立起一一對(duì)應(yīng)的關(guān)系,即每個(gè)用戶(hù)都對(duì)應(yīng)著一個(gè)session對(duì)象(稱(chēng)作用戶(hù)的會(huì)話(huà)),不同用戶(hù)(不同瀏覽器)的session對(duì)象互不相同,具有不同的id號(hào)碼?!霎?dāng)用戶(hù)再訪(fǎng)問(wèn)該Web服務(wù)目錄的其它頁(yè)面時(shí),Tomcat服務(wù)器不再分配給用戶(hù)的新session對(duì)象,而是使用完全相同的一個(gè),直到session對(duì)象達(dá)到了最大生存時(shí)間或用戶(hù)關(guān)閉自己的瀏覽器或Tomcat服務(wù)器關(guān)閉,Tomcat服務(wù)器將銷(xiāo)毀用戶(hù)的session對(duì)象★簡(jiǎn)單地說(shuō),用戶(hù)(瀏覽器)在訪(fǎng)問(wèn)一個(gè)Web服務(wù)目錄期間,服務(wù)器為該用戶(hù)分配一個(gè)session對(duì)象(稱(chēng)作和該用戶(hù)的會(huì)話(huà)),服務(wù)器可以在各個(gè)頁(yè)面使用這個(gè)session記錄當(dāng)前用戶(hù)的有關(guān)信息。而且服務(wù)器保證不同用戶(hù)的session對(duì)象互不相同。注

同一個(gè)用戶(hù)在不同的Web服務(wù)目錄中的session是互不相同的。4.3session對(duì)象4.3.1session對(duì)象的id例子13中用戶(hù)在服務(wù)器的某個(gè)Web服務(wù)目錄中的2個(gè)頁(yè)面example4_13_a.jsp和example4_13_b.jsp進(jìn)行鏈接,2個(gè)頁(yè)面的session對(duì)象是完全相同的.例子13example4_13_a.jspexample4_13_b.jsp

4.3session對(duì)象4.3.2session對(duì)象與URL重寫(xiě)■session對(duì)象能和用戶(hù)建立起一一對(duì)應(yīng)關(guān)系依賴(lài)于用戶(hù)瀏覽器是否支持Cookie。■如果用戶(hù)不支持Cookie,JSP頁(yè)面可以通過(guò)URL重寫(xiě)來(lái)實(shí)現(xiàn)session對(duì)象的唯一性。Stringstr=response.encodeRedirectURL("example4_13_b.jsp");然后將連接目標(biāo)寫(xiě)成<%=str%>例如:<formaction="example4_13_b.jsp"method=post>更改為:<formaction=<%=str%>method=post>4.3session對(duì)象4.3.3session對(duì)象存儲(chǔ)數(shù)據(jù)(1)publicvoidsetAttribute(Stringkey,Objectobj)。session對(duì)象可以調(diào)用該方法將參數(shù)Object指定的對(duì)象obj添加到session對(duì)象中,并為添加的對(duì)象指定了一個(gè)索引關(guān)鍵字,如果添加的兩個(gè)對(duì)象的關(guān)鍵字相同,則先前添加的對(duì)象被清除。(2)publicObjectgetAttribute(Stringkey)。獲取session對(duì)象索引關(guān)鍵字是key的對(duì)象。由于任何對(duì)象都可以添加到session對(duì)象中,因此用該方法取回對(duì)象時(shí),應(yīng)顯式轉(zhuǎn)化為原來(lái)的類(lèi)型。例子14實(shí)現(xiàn)猜數(shù)字游戲。當(dāng)用戶(hù)訪(fǎng)問(wèn)example4_14.jsp時(shí),隨機(jī)分配給用戶(hù)一個(gè)1到100之間的整數(shù),然后將這個(gè)整數(shù)存在用戶(hù)的session對(duì)象中。用戶(hù)在form表單的text里輸入自己的猜測(cè)。用戶(hù)輸入猜測(cè)后單擊提交鍵,訪(fǎng)問(wèn)example4_14_judge.jsp頁(yè)面,該頁(yè)面負(fù)責(zé)判斷用戶(hù)給出的猜測(cè)是否和用戶(hù)的session對(duì)象中存放的那個(gè)整數(shù)相同,如果相同就將用戶(hù)定向到example4_14_success.jsp,如果不相同就就將用戶(hù)定向到example4_14_large.jsp或example4_14_small.jsp,然后,用戶(hù)在這些頁(yè)面再重新提交新的猜測(cè)給example4_14_judge.jsp頁(yè)面。4.3session對(duì)象4.3.3session對(duì)象存儲(chǔ)數(shù)據(jù)例子14example4_14.jspexample4_14_judge.jspexample4_14_small.jspexample4_14_large.jspexample4_14_success.jsp4.3session對(duì)象4.3.4session對(duì)象的生存期限■session對(duì)象的生存期限依賴(lài)于session對(duì)象是否調(diào)用invalidate()方法使得session無(wú)效或session對(duì)象達(dá)到了設(shè)置的最長(zhǎng)的“發(fā)呆”狀態(tài)時(shí)間以及用戶(hù)是否關(guān)閉瀏覽器或服務(wù)器被關(guān)閉?!^“發(fā)呆”狀態(tài)時(shí)間是指用戶(hù)對(duì)某個(gè)Web服務(wù)目錄發(fā)出的兩次請(qǐng)求之間的間隔時(shí)間(默認(rèn)的發(fā)呆時(shí)間是30分鐘)?!蜷_(kāi)Tomcat安裝目錄中conf文件下的配置文件web.xml,找到<session-config><session-timeout>30</session-timeout></session-config>將其中的30修改成所要求的值即可(單位為分鐘)。。4.3session對(duì)象4.3.4session對(duì)象的生存期限例子15中session對(duì)象使用setMaxInactiveInterval(intinterval)方法設(shè)置最長(zhǎng)的“發(fā)呆”狀態(tài)時(shí)間為6秒。用戶(hù)可以通過(guò)刷新頁(yè)面檢查是否達(dá)到了最長(zhǎng)的“發(fā)呆”時(shí)間,如果兩次刷新之間的間隔超過(guò)6秒,用戶(hù)先前的session將被取消,用戶(hù)將獲得一個(gè)新的session對(duì)象。例子15example4_15.jsp4.4application對(duì)象4.4.1application對(duì)象的常用方法4.3節(jié)學(xué)習(xí)了session對(duì)象,用戶(hù)第一次訪(fǎng)問(wèn)Web服務(wù)目錄時(shí),Tomcat服務(wù)器創(chuàng)建和該用戶(hù)相對(duì)應(yīng)的session對(duì)象,當(dāng)用戶(hù)在所訪(fǎng)問(wèn)的Web服務(wù)目錄的各個(gè)頁(yè)面之間瀏覽時(shí),這個(gè)session對(duì)象都是同一個(gè),而且不同用戶(hù)的session對(duì)象是互不相同的。本節(jié)學(xué)習(xí)的application對(duì)象也是由Tomcat服務(wù)器負(fù)責(zé)創(chuàng)建,但與

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論