Java Web程序設(shè)計項(xiàng)目實(shí)戰(zhàn)(微課版)課件 廖麗 項(xiàng)目3、4 JSP內(nèi)置對象、JDBC數(shù)據(jù)庫訪問_第1頁
Java Web程序設(shè)計項(xiàng)目實(shí)戰(zhàn)(微課版)課件 廖麗 項(xiàng)目3、4 JSP內(nèi)置對象、JDBC數(shù)據(jù)庫訪問_第2頁
Java Web程序設(shè)計項(xiàng)目實(shí)戰(zhàn)(微課版)課件 廖麗 項(xiàng)目3、4 JSP內(nèi)置對象、JDBC數(shù)據(jù)庫訪問_第3頁
Java Web程序設(shè)計項(xiàng)目實(shí)戰(zhàn)(微課版)課件 廖麗 項(xiàng)目3、4 JSP內(nèi)置對象、JDBC數(shù)據(jù)庫訪問_第4頁
Java Web程序設(shè)計項(xiàng)目實(shí)戰(zhàn)(微課版)課件 廖麗 項(xiàng)目3、4 JSP內(nèi)置對象、JDBC數(shù)據(jù)庫訪問_第5頁
已閱讀5頁,還剩165頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

項(xiàng)目三

JSP內(nèi)置對象

項(xiàng)目要

求本項(xiàng)目是JSP內(nèi)置對象的應(yīng)用,主要是實(shí)現(xiàn)響應(yīng)客戶端的請求、向客戶端發(fā)送數(shù)據(jù)等功能,并能應(yīng)用JSP內(nèi)置對象編寫簡單的應(yīng)用程序。

項(xiàng)目分

析要完成項(xiàng)目任務(wù),至少需要具備兩個基本條件:一是需要掌握J(rèn)SP內(nèi)置對象的語法規(guī)范,二是精通JSP內(nèi)置對象的應(yīng)用,該項(xiàng)目分5個任務(wù),分別是應(yīng)用request對象設(shè)計網(wǎng)上考試系統(tǒng)、應(yīng)用response對象設(shè)計化妝品登錄功能、應(yīng)用session對象設(shè)計火鍋點(diǎn)餐系統(tǒng)、應(yīng)用application對象制作留言板、用Cookie對象制作站點(diǎn)計數(shù)器

項(xiàng)目目

標(biāo)【知識目標(biāo)】掌握<jsp:include>和<jsp:forward>基本格式,掌握session對象及常用方法的應(yīng)用、掌握application對象的基本特征及常用方法、熟悉Cookie對象的應(yīng)用?!灸芰δ繕?biāo)】能應(yīng)用request對象處理表單信息、能應(yīng)用response對象響應(yīng)各種信息、能應(yīng)用session對象實(shí)現(xiàn)多個程序或用戶之間共享數(shù)據(jù)、能應(yīng)用application對象實(shí)現(xiàn)多個程序或用戶之間共享數(shù)據(jù),能應(yīng)用Cookie對象精確統(tǒng)計站點(diǎn)數(shù)據(jù)。【素質(zhì)目標(biāo)】具有良好的思考和分析問題的能力。

知識導(dǎo)

圖任務(wù)一應(yīng)用request對象設(shè)計網(wǎng)上考試系統(tǒng)--任務(wù)演示由于電腦時代的到來以及internet的迅速發(fā)展,電腦無處不在,各種工作效率也在大幅提高,同時也對教育的發(fā)展形成新的推動力,考試測試作為教學(xué)中的一個重要環(huán)節(jié),應(yīng)用網(wǎng)上考試可以大量的節(jié)省人力、物力與財力,也可大幅度增加考試成績的客觀性和公正性,本任務(wù)是設(shè)計一個網(wǎng)上考試系統(tǒng),如圖所示。任務(wù)一應(yīng)用request對象設(shè)計網(wǎng)上考試系統(tǒng)–知識準(zhǔn)備<form>表單標(biāo)記request

對象request對象的常用方法內(nèi)置對象outJSP的內(nèi)置對象為了Web應(yīng)用程序的開發(fā)的方便,在JSP頁面中內(nèi)置了一些默認(rèn)的對象,這些對象不需要預(yù)先聲明就可以在腳本代碼和表達(dá)式中隨意使用。內(nèi)置對象名稱所屬類型有效范圍說明outjavax.servlet.jsp.JspWriterpage該對象提供對輸出流的訪問requestjavax.servlet.http.HttpServletRequestrequest該對象對http請求數(shù)據(jù)的訪問responsejavax.servlet.http.HttpServletResponsepage該對象允許直接訪問HttpServletResponse對象,可用來向客戶端輸出數(shù)據(jù)sessionjavax.servlet.http.HttpSessionsession該對象可用來保存在服務(wù)器與一個客戶端之間需要保存的數(shù)據(jù),當(dāng)客戶端關(guān)閉網(wǎng)站的所有網(wǎng)頁時,session變量會自動消失applicationjavax.servlet.ServletContextapplication該對象代表應(yīng)用程序上下文,它允許JSP頁面與包括在同一應(yīng)用程序中的任何Web組件共享信息configjavax.servlet.ServletConfigpage該對象允許將初始人數(shù)據(jù)傳遞給一個JSP頁面exceptionjava.lang.Throwablepage該對象含有只能由指定的JSP”錯誤處理頁面”訪問的異常數(shù)據(jù)pagejavax.servlet.jsp.HttpJspPagepage該對象代表JSP頁面對應(yīng)的Servlet類實(shí)例pageContextjavax.servlet.jsp.PageContextpage該對象是jsp頁面本身的上下文,它提供了唯一一組方法來管理具有不同作用域的屬性。1.內(nèi)置對象outout對象用來向客戶端輸出內(nèi)容,被封裝在javax.servlet.jsp.JspWriter接口。out變量是從PageContext對象初始化而獲得的,out對象的作用域是page。print()輸出各種類型數(shù)據(jù)println()輸出各種類型數(shù)據(jù)并換行newLine()輸出一個換行符close()關(guān)閉輸出流flush()輸出緩沖區(qū)里的數(shù)據(jù)clearBuffer()清除緩沖區(qū)里的數(shù)據(jù),并把數(shù)據(jù)寫到客戶端clear()清除緩沖區(qū)里的數(shù)據(jù),但不寫到客戶端getBufferSize()獲取緩沖區(qū)的大小isAutoFlush()判斷緩沖區(qū)是否自動刷新1.內(nèi)置對象outout對象用來向客戶端輸出內(nèi)容,被封裝在javax.servlet.jsp.JspWriter接口。out變量是從PageContext對象初始化而獲得的,out對象的作用域是page?!纠?-1-1】out內(nèi)置對象的應(yīng)用<bodybgcolor="f0fff0"><%out.print("輸出字符數(shù)組<br>");out.print(newchar[]{'a','b','c'});out.print("<br>");out.print("輸出字符");out.print("<br>1");out.print("<br>輸出整數(shù)");out.print(5);out.print("<br>輸出單精度數(shù)");out.print(12.5f);%></body>用戶經(jīng)常使用表單向服務(wù)器傳輸數(shù)據(jù),基本格式如下:基本格式:<formaction="提交信息的目的地頁面"method=get|postname="表單的名字">

數(shù)據(jù)提交手段部分

</form>2.

<form>表單標(biāo)記其中<form></form>是表單標(biāo)記,其中method屬性取值get或post。get方法和post方法的主要區(qū)別:使用get方法提交的信息會在提交的過程中顯示在瀏覽器的地址欄中,而用post方法提交的信息不會顯示在地址欄中。提交手段包括:文本框、列表框、文本區(qū)等2.

<form>表單標(biāo)記【例3-1-2】創(chuàng)建一個能輸入信息的表單關(guān)鍵代碼<body><formaction=""method="post"><inputtype="text"name="str"><inputtype="submit"value="提交"></form></body>3.

request

對象request對象封裝了客戶端提交的信息,通過調(diào)用該對象相應(yīng)的方法可以獲取用戶提交的信息,獲得表單的信息內(nèi)容有四種方法,分別是:(1)getParameter():獲得客戶端請求的指定屬性值,如果該屬性不存在,則返回null值,并且,該屬性的值唯一才能使用。(2)getParameterNames():獲得客戶端請求的所有屬性,該方法返回枚舉類型,如果屬性不存在,則返回一個空枚舉。(3)getParameterMap():獲得客戶端請求的所有屬性和其對應(yīng)的值,返回值是Map類型,其中鍵值是一個字符串,其對應(yīng)的值是一個字符串?dāng)?shù)組。(4)getParameterValue():獲得指定屬性的所有值,如果屬性不存在,則返回空,如果屬性值是唯一的,則返回的數(shù)組長度為13.

request

對象【例3-1-3】顯示3-1-2提交的信息關(guān)鍵代碼<body><%request.setCharacterEncoding("utf-8");Strings=request.getParameter("str");out.print(s);%></body>3.

request

對象【例3-1-4】顯示用戶選擇的愛好關(guān)鍵代碼第一步創(chuàng)建hobby.jsp頁面<bodybgcolor="f0fff0"><formaction="showhobby.jsp"method="post">用戶名:<inputtype="text"name="username"><br/>3.

request

對象密碼:<inputtype="password"name="password"><br/>愛好:<inputtype="checkbox"name="hobby"value="sing"/>唱歌<inputtype="checkbox"name="hobby"value="dangce"/>跳舞<inputtype="checkbox"name="hobby"value="football"/>足球<br/><inputtype="submit"value="提交"/></form>第二步:創(chuàng)建showhobby.jsp<bodybgcolor="f0fff0"><%request.setCharacterEncoding("utf-8");Stringusername=request.getParameter("username");

out.println(username+"的愛好是:<br/>");String[]hobby=request.getParameterValues("hobby");for(Strings:hobby){ out.println(s+"</br>");}%></body>4.

request對象的常用方法(1)getProtocol():獲取請求使用的通信協(xié)議,如http/1.1。(2)getServletPath():獲取請求的JSP頁面所在的目錄。(3)getContentLength():獲取HTTP請求長度。(4)getMethod():獲取表單提交信息的方式,如post或get.(5)getHeader(Strings):獲取請求中頭的值。(6)getHeaderNames():獲取頭名字的一個枚舉。(7)getHeaders(Strings):獲取頭的全部值的一個枚舉。(8)getRemoteAddr():獲取客戶的IP地址(9)getRemoteHost():獲取客戶機(jī)的名稱(10)getServerName():獲取服務(wù)器的名稱(11)getServerPort():獲取服務(wù)器的端口號4.

request對象的常用方法【例3-1-5】request對象的常用方法關(guān)鍵代碼<bodybgcolor="f0fff0"><formaction=""method=postname=form><inputtype="submit"value="提交"name=submit></form>4.

request對象的常用方法<%Stringprotocol=request.getProtocol();Stringpath=request.getServletPath();Stringmethod=request.getMethod();Stringheader=request.getHeader("accept");%><tableborder=1><tr><td>客戶使用的協(xié)議是:</td><td>"<%=protocol%>"</td></tr>

4.

request對象的常用方法<tr><td>用戶請求的頁面所在位置:</td><td>"<%=path%>"</td></tr><tr><td>客戶提交信息的方式:</td><td>"<%=method%>"</td></tr><tr><td>獲取http頭文件中accept的值</td><td>"<%=header%>"</td></tr></table>任務(wù)一應(yīng)用request對象設(shè)計網(wǎng)上考試系統(tǒng)--任務(wù)實(shí)施任務(wù)要求:(1)設(shè)計兩個頁面,一個是考試試題頁面exam.jsp,另一個是考試結(jié)果頁面requstexam.jsp,將考生的班級,姓名,成績展示出來,分兩步完成。第一步創(chuàng)建考試試題頁面exam.jsp<bodybgcolor="f0fff0"><h1>JavaWeb程序設(shè)計網(wǎng)上考試系統(tǒng)</h1><formaction="requestexam.jsp"method="post">請輸入姓名:<inputtype="text"name="name">請選擇班級:<selectname="class"size=1><optionselectedvalue="21大數(shù)據(jù)0031">21大數(shù)據(jù)0031<optionvalue="21大數(shù)據(jù)00312">21大數(shù)據(jù)0032<optionvalue="21大數(shù)據(jù)0033">21大數(shù)據(jù)0033<optionvalue="21大數(shù)據(jù)0034">21大數(shù)據(jù)0034</select>任務(wù)一應(yīng)用request對象設(shè)計網(wǎng)上考試系統(tǒng)--任務(wù)實(shí)施<br/><p>在JavaWeb中,可以獲得用戶表單提交的信息的內(nèi)置對象是:()<br/><inputtype="radio"name="t1"value="a">response對象<inputtype="radio"name="t1"value="b">request對象<br/><inputtype="radio"name="t1"value="c">session對象<inputtype="radio"name="t1"value="d">application對象<br/><p>Tomcat的默認(rèn)端口是什么?(

)</p><inputtype="radio"name="t2"value="a">8080<inputtype="radio"name="t2"value="b">80<br/><inputtype="radio"name="t2"value="c">8009<inputtype="radio"name="t2"value="d">8005<br/><p>下面選項(xiàng)中,表示服務(wù)器錯誤的狀態(tài)碼是()</p><inputtype="radio"name="t3"value="a">404<inputtype="radio"name="t3"value="b">500<br/><inputtype="radio"name="t3"value="c">302<inputtype="radio"name="t3"value="d">100<br/><inputtype="submit"value="提交答案"name="submit"></form></body>任務(wù)一應(yīng)用request對象設(shè)計網(wǎng)上考試系統(tǒng)--任務(wù)實(shí)施第二步創(chuàng)建考試試題頁面requstexam.jsp<bodybgcolor="f0fff0"><%request.setCharacterEncoding("utf-8");intn=0;StringstrName=request.getParameter("name");StringstrClass=request.getParameter("class");StringstrTemp=strClass+"的"+strName+"JavaWeb考試的成績是:";Strings1=request.getParameter("t1");Strings2=request.getParameter("t2");Strings3=request.getParameter("t3");if(s1==null){s1="";}if(s2==null){s2="";}if(s3==null){ s3="";}if(s1.equals("b")){ n=n+30;}if(s2.equals("a")){ n=n+30;}if(s3.equals("b")){ n=n+40;}%><%=strTemp%><p>您的得分為:<%=n%>分</body>任務(wù)一應(yīng)用request對象設(shè)計網(wǎng)上考試系統(tǒng)--任務(wù)拓展1.

表單提交的method方法method表示表單發(fā)送的方式,分為兩種:(1)get方式是將表單內(nèi)容經(jīng)過編碼之后,通過URL發(fā)送,可以在地址欄里看到傳遞的參數(shù)。request1.jsp關(guān)鍵頁面<body><formaction="qh.jsp"method="get"><inputtype="text"name="str"><inputtype="submit"value="提交"></form></body>qh.jsp關(guān)鍵代碼<body><%request.setCharacterEncoding("utf-8");Strings=request.getParameter("str");out.print(s);%></body>說明:可以在地址欄里看到j(luò)sp頁面?zhèn)鬟f過來的參數(shù)hello任務(wù)一化妝品框架設(shè)計

--任務(wù)拓展(2)post方式是將表單的內(nèi)容通過http發(fā)送,在地址欄看不到表單的提交信息,如圖所示。

<body><formaction="qh.jsp"method="post"><inputtype="text"name="str"><inputtype="submit"value="提交"></form></body>任務(wù)一化妝品框架設(shè)計

--任務(wù)拓展2.解決請求時中文亂碼問題<meta>標(biāo)簽始終位于head元素中,<meta>標(biāo)簽的使用格式為:<meta可選屬性名=”…”content=””/>(1)轉(zhuǎn)換字符編碼Stringstr=request.getParameter(“message”);Byteb[]=str.getBytes(“ISO-8859-1”);str=newString(b);(2)request設(shè)置編碼首先在頁面使用page指令指定編碼為gb2312或是utf-8request在獲取信息之前使用setCharacterEncoding方法設(shè)置自己的編碼gb2312或utf-8request.setCharacterEncoding(“utf-8”)任務(wù)二應(yīng)用response對象設(shè)計化妝品登錄--任務(wù)演示本任務(wù)是用戶通過表單控件輸入并提交信息,JSP獲得表單數(shù)據(jù),進(jìn)行邏輯處理JSP根據(jù)處理結(jié)果,轉(zhuǎn)向不同的結(jié)果頁面登錄界面成功界面失敗界面任務(wù)二應(yīng)用response對象設(shè)計化妝品登錄–知識準(zhǔn)備response對象實(shí)現(xiàn)重定向response對象刷新頁面1.

response對象實(shí)現(xiàn)重定向response對象用于響應(yīng)客戶請求并向客戶端輸出信息。response對象是javax.servlet.http.HttpServletResponse接口類的對象,它封裝了JSP產(chǎn)生的響應(yīng),并發(fā)送到客戶端以響應(yīng)客戶端的請求response對象的常用方法方法名方法功能addHeader(Stringname,Stringvalue)添加HTTP文件頭,該head將會傳遞到客戶端setHeader(Stringname,Stringvalue)設(shè)置指定名字的HTTP文件頭值addCookie(Cookiecook)添加一個Cookie對象,用來保存客戶端的用戶信息encodeURL()使用sessionId來封裝URLflushBuffer()強(qiáng)制將當(dāng)前緩沖區(qū)的內(nèi)容發(fā)送到客戶端sendRedirect(Stringlocation)把響應(yīng)發(fā)送到另一個指定的位置進(jìn)行處理getOutputStream()返回到客戶端的輸出流對象setContentType()動態(tài)改變contentType屬性1.

response對象實(shí)現(xiàn)重定向(1)response重定向網(wǎng)頁在JSP頁面中,可以使用response對象中的sendRedirect()方法將客戶請求重定向到一個不同的頁面。(2)<select><option>標(biāo)記下拉式列表和滾動列表通過<select>和<option>標(biāo)記來定義,經(jīng)常作為<form>的子標(biāo)記為表單提供選擇數(shù)據(jù)的GUI。<select>標(biāo)記將<option>作為子標(biāo)記,形成下拉列表或滾動列表的基本格式是:<selectname="myName"><optionvalue="item1"><optionvalue="item2">

…</select>1.

response對象實(shí)現(xiàn)重定向在select中增加size屬性的值就變成滾動列表,size的值是滾動列表的可見行的數(shù)目。滾動列表的基本格式是:selectname="myName"size="正整數(shù)"><optionvalue="item1"><optionvalue="item2">…</select>request對象通過name獲取滾動列表中被選中的option的值(參數(shù)value指定的值)1.

response對象實(shí)現(xiàn)重定向【例3-2-1】編寫程序,單擊下拉選項(xiàng),實(shí)現(xiàn)重定向到對應(yīng)的頁面第一步:創(chuàng)建response1.jsp頁面<body><formaction=""method="post"><selectname="opt"><optionvalue="sina">新浪</option><optionvalue="sohu">搜狐</option><optionvalue="163">網(wǎng)易</option></select><inputtype="submit"value="go"></form></body>1.

response對象實(shí)現(xiàn)重定向第二步:創(chuàng)建responseshow.jsp頁面<bodybgcolor="f0fff0"><%Stringstr=request.getParameter("opt");if(str.equals("sina")){response.sendRedirect("");}elseif(str.equals("sohu")){response.sendRedirect("");}else{response.sendRedirect("");}%></body>2.response對象刷新頁面【例3-2-2】編寫程序,通過頁面的刷新,每隔2秒刷新一下頁面,動態(tài)改變時間<%@pageimport="java.util.*"%><body><bodybgcolor="f0fff0"><p>當(dāng)前時間是:<br><%out.print(""+newDate().toLocaleString());response.setHeader("Refresh","2");%></body>第一步:編寫head.jsp,并將登錄的href設(shè)置為login.jsp任務(wù)二應(yīng)用response對象設(shè)計化妝品登錄–任務(wù)實(shí)現(xiàn)<styletype="text/css">#bd{background:url("image/back1.jpg");background-size:100%;}</style><bodyid=bd><divalign="center"><tablecellSpacing="1"cellPadding="1"width="660"align="center"border="0"><trvalign="bottom"><td><ahref="login.jsp">登錄</a></td><td><ahref="">注冊</a></td><td><ahref="">瀏覽化妝品</a></td><td><ahref="">查找化妝品</a></td><td><ahref="">查看購物車</a></td>

<td><ahref="">查看訂單</a></td><td><ahref="">退出</a></td><td><ahref="">主頁</a></td></tr></table></div></body>第二步:編寫index.jsp任務(wù)二應(yīng)用response對象設(shè)計化妝品登錄–任務(wù)實(shí)現(xiàn)<%@includefile="head.jsp"%><bodybgcolor="f0fff0"><imgalt=""src="image/a1.JPG"></body><tr><td>登錄名稱</td><td><inputtype="text"name="logname"></td></tr><tr><td>輸入密碼</td><td><inputtype=“password"name="password"></td></tr></table><td><inputtype="submit"value="提交"></td></form></center></body>第三步:編寫

login.jsp<%@includefile="head.jsp"%><bodybackground="image/back1.jpg"><center><formaction="login2.jsp"method="post"><br><br><tableborder="2"><tr><thcolspan=2>請您登錄</th></tr>第四步:修改login2.jsp任務(wù)二應(yīng)用response對象設(shè)計化妝品登錄–任務(wù)實(shí)現(xiàn)<bodybgcolor="f0fff0"><%request.setCharacterEncoding("utf-8");Stringusername=request.getParameter("logname");Stringpwd=request.getParameter("password");if(username.equals("liaoli")&&pwd.equals("123"))response.sendRedirect("success.jsp");elseresponse.sendRedirect("fail.jsp");%>任務(wù)二應(yīng)用response對象設(shè)計化妝品登錄–任務(wù)實(shí)現(xiàn)<%@includefile="head.jsp"%><bodybgcolor="f0fff0"><b>登錄成功,歡迎你進(jìn)入化妝品網(wǎng)站!</b></body>第五步:新建一個success.jsp頁面,輸入登錄成功,歡迎你進(jìn)入化妝品網(wǎng)站!第六步:新建一個fail.jsp,輸入用戶名或密碼有誤!<%@includefile="head.jsp"%><bodybgcolor="f0fff0"><b>你輸入的用戶名或密碼有誤!</b></body>任務(wù)二應(yīng)用response對象設(shè)計化妝品登錄–任務(wù)拓展1.response狀態(tài)行當(dāng)服務(wù)器對用戶請求響應(yīng)時,它發(fā)送的首行稱為狀態(tài)行。狀態(tài)行包括3位數(shù)字的狀態(tài)代碼和對狀態(tài)代碼的描述,常用的狀態(tài)碼如表所示狀態(tài)代碼代碼說明101服務(wù)器正在升級協(xié)議100用戶可以繼續(xù)201請求成功且在服務(wù)器上創(chuàng)建了新的資源202請求已被接受但還沒有處理完畢200請求成功203用戶端給出的元信息不是發(fā)自服務(wù)器的204請求成功,但沒有新信息205用戶必須重置文檔視圖206服務(wù)器執(zhí)行了部分get請求300請求的資源有多種表示法301資源已經(jīng)被永久移動到新位置302資源已經(jīng)被臨時移動到新位置303應(yīng)答可以在另外一個url中找到304get方式請求不可用任務(wù)二應(yīng)用response對象設(shè)計化妝品登錄–任務(wù)拓展1.response狀態(tài)行當(dāng)服務(wù)器對用戶請求響應(yīng)時,它發(fā)送的首行稱為狀態(tài)行。狀態(tài)行包括3位數(shù)字的狀態(tài)代碼和對狀態(tài)代碼的描述,常用的狀態(tài)碼如表所示狀態(tài)代碼代碼說明305請求必須通過代理來訪問400請求有語法錯誤401請求需要HTTP認(rèn)證403取重了請求但拒絕服務(wù)404請求的資源不可用405請求所用的方法是不允許的406請求的資源只能用請求不能接受的內(nèi)容特性來響應(yīng)407用戶必須得到認(rèn)證408請求超時409發(fā)生沖突,請求不能完成410請求的資源已經(jīng)不可用411請求需要一個定義的內(nèi)容長度才能處理413請求太大,被拒絕任務(wù)三應(yīng)用session對象設(shè)計火鍋點(diǎn)餐系統(tǒng)--任務(wù)演示“日暮長街吃火鍋,家家扶得醉人歸。這句詩恰如其分的描述了火鍋的受歡迎程度,重慶火鍋融“麻、辣、燙”于一爐,今天,我們來學(xué)習(xí)在火鍋店點(diǎn)餐系統(tǒng),如圖所示任務(wù)三應(yīng)用session對象設(shè)計火鍋點(diǎn)餐系統(tǒng)–知識準(zhǔn)備session對象session對象的idsession常用方法1.

session對象Session對象是與請求相關(guān)的HttpSession對象,它封裝了屬于客戶會話的所有信息,session對象也是一個JSP內(nèi)置對象,在第一個JSP頁面被裝載時自動創(chuàng)建,完成會話期管理。當(dāng)用戶在應(yīng)用程序的Web頁之間跳轉(zhuǎn)時,存儲在session中的變量將不會丟失,而是在整個用戶會話中一直存在。當(dāng)用戶發(fā)出請求時,如果該用戶還沒有會話,則Web服務(wù)器將自動創(chuàng)建一個session對象,當(dāng)會話過期或被放棄后,服務(wù)器將終止該會話2.session對象的idsession對象被分配了一個String類型的id號,Tomcat服務(wù)器同時將這個id號發(fā)送到用戶端,存放在用戶的Cookie中。這樣,session對象和用戶之間就建立起一一對應(yīng)的關(guān)系,即每個用戶都對應(yīng)著一個session對象(稱作用戶的會話),不同用戶的session對象互不相同,具有不同的id號碼。簡單地說,用戶在訪問一個Web服務(wù)目錄期間,服務(wù)器為該用戶分配一個session對象(稱作用戶的會話),服務(wù)器可以在各個頁面使用這個session記錄當(dāng)前用戶的有關(guān)信息。而且服務(wù)器保證不同用戶的session對象互不相同。3.session常用方法session對象使用下列方法處理數(shù)據(jù):(1)publicvoidsetAttribute(Stringname,Objectvalue)該方法將參數(shù)Object指定的對象value添加到session對象中,并為添加的對象指定了一個索引關(guān)鍵字。其中name指定設(shè)置session屬性的名稱,value綁定session屬性的name值,該值是一個對象。(2)publicObjectgetAttribute(Stringname)獲取session作用域里指定屬性的值,該值是一個Object類型。(3)publicvoidremoveAttribute(Stringname)指定需要移除HTTP會話中指定的屬性名稱。(4)publicEnumerationgetAttributeNames()

返回HTTP會話中所有session屬性的枚舉。3.session常用方法(5)publicvoidinvalidate()銷毀當(dāng)前的session對象。(6)publicStringgetId()返回當(dāng)前session的id字符串。(7)publiclonggetCreationTime()返回當(dāng)前會話的創(chuàng)建時間,單位是秒。(8)publiclonggetLastAccessedTime()用于返回當(dāng)前會話session的最后一次訪問的時間。(9)publicvoidsetMaxInactiveInterval(intinterval)設(shè)置session有效的時間,單位是秒。(10)publicvoidgetMaxInactiveInterval()返回session失效的時間,如果為-1表示永不過期,單位是秒。3.session常用方法【案例3-3-1】獲取session的id關(guān)鍵代碼:<bodybgcolor="f0fff0">我是第一個頁面<%Stringid=session.getId();out.print("第一個頁面的session的id是:<br>"+id);%><formaction=""method="post"><inputtype="text"name="my"><inputtype="submit"value="送出"name="submit"></form>3.session常用方法【案例3-3-2】打開家電購物商城,如果當(dāng)前沒有登錄,則轉(zhuǎn)到登錄窗口,如果當(dāng)前已經(jīng)登錄了,則顯示當(dāng)前登錄的用戶信息,如果是從登錄窗口進(jìn)入主頁面,則設(shè)置當(dāng)前用戶會話的用戶名,如圖所示。3.session常用方法第一步

創(chuàng)建session2.jsp<body><formaction="session21.jsp"method="post"><table><tr><td>用戶名:</td><td><inputtype="text"name="user"/></td></tr><tr><td>密碼:</td><td><inputtype="password"name="pass"/></td></tr><tr><tdalign="right"><inputtype="submit"value="提交"/></td><tdalign="center"><inputtype="reset"value="重置"/></td></tr></table></form></body>3.session常用方法第二步session21.jsp<body><%request.setCharacterEncoding("utf-8");Stringuser=request.getParameter("user");if(!(user==""||user.equals(""))){

session.setAttribute("user",user);}%><%user=(String)session.getAttribute("user");if("".equals(user)||user==null){out.println("用戶未登錄,即將跳轉(zhuǎn)到登錄界面");response.setHeader("Refresh","5");response.sendRedirect("session2.jsp");}else{out.println("家電購物商城</br></br>"); out.println("歡迎"+user+"光臨本商場</br?");}%></body>3.session常用方法【案例3-3-3】應(yīng)用session方法,獲取session的id,創(chuàng)建時間,最大有效時間,最后一次訪問時間,是否是新的會話,如圖所示3.session常用方法關(guān)鍵代碼:<body><h1>會話信息</h1><tableborder="1"><tr><th>session屬性</th><th>值</th></tr><tr><td>session的id</td><td><%=session.getId()%></td></tr><tr><td>session的創(chuàng)建時間</td><td><%=session.getCreationTime()%></td></tr><tr><td>session的最大有效時間</td><td><%=session.getMaxInactiveInterval()%></td></tr><tr><td>session的最后操作時間</td><td><%=session.getLastAccessedTime()%></td></tr><tr><td>session是否是新創(chuàng)建的</td><td><%=session.getLastAccessedTime()%></td></tr></table></body>任務(wù)三應(yīng)用session對象設(shè)計火鍋點(diǎn)餐系統(tǒng)–任務(wù)實(shí)施任務(wù)要求:用session對象模擬點(diǎn)餐、存儲用戶的姓名和點(diǎn)餐的信息,并完成結(jié)賬。第一步創(chuàng)建一個buy1.jsp,輸入有戶信息<head><br>輸入姓名:<ahref="username.jsp">輸入用戶名</a><br>點(diǎn)餐:<ahref="order.jsp">點(diǎn)餐</a><br>結(jié)賬:<ahref="bill.jsp">結(jié)賬</a></head><!--創(chuàng)建了一個表單,輸入用戶名和一個提交按鈕—><bodybgcolor="f0fff0"><br><br>輸入用戶名<formaction=""method="post"name="form"><inputtype="text"name="name"><inputtype="submit"value="確定"name=submit></form>

任務(wù)三應(yīng)用session對象設(shè)計火鍋點(diǎn)餐系統(tǒng)–任務(wù)實(shí)施<!--請求獲取輸入的用戶名,并賦給name--><%Stringname=request.getParameter("name");if(name==null)name="";else//將用戶名的信息保存到session的name中session.setAttribute("name",name);%></body>

第二步創(chuàng)建一個order.jsp,用于點(diǎn)餐<head><br>輸入姓名:<ahref="username.jsp">輸入用戶名</a><br>點(diǎn)餐:<ahref="order.jsp">點(diǎn)餐</a><br>結(jié)賬:<ahref="bill.jsp">結(jié)賬</a></head><bodybgcolor="f0fff0"><br><br>請點(diǎn)餐:<inputtype="checkbox"name="data"value="鴨腸15元">鴨腸15元<br><!--輸入框的類型是checkbox,name表示復(fù)選框的名字,value表示復(fù)選框的值--><inputtype="checkbox"name="data"value="毛肚40.5元">毛肚40.5元<br><inputtype="checkbox"name="data"value="牛肉48.3元">牛肉48.3元<br><inputtype="checkbox"name="data"value="山藥20元">山藥20元<br><inputtype="checkbox"name="data"value="小菜15.5元">小菜15.5元<br><inputtype="submit"value="提交"><inputtype="reset"value="重設(shè)"></form>任務(wù)三應(yīng)用session對象設(shè)計火鍋點(diǎn)餐系統(tǒng)–任務(wù)實(shí)施<%Stringorder[]=request.getParameterValues("data");//請求獲取復(fù)選框data的value的值,也就是點(diǎn)餐的信息if(order!=null){StringBufferstr=newStringBuffer();//創(chuàng)建一個字符串變量for(intk=0;k<order.length;k++){str.append(order[k]+"<br>");//將點(diǎn)餐的信息一一放到str字符串中}session.setAttribute("order",str);//將str的值存儲到session的order關(guān)鍵字中}%></body>任務(wù)三應(yīng)用session對象設(shè)計火鍋點(diǎn)餐系統(tǒng)–任務(wù)實(shí)施第三步創(chuàng)建bill.jsp用于結(jié)賬bill.jsp<br>輸入姓名:<ahref="username.jsp">輸入用戶名</a><br>點(diǎn)餐:<ahref="order.jsp">點(diǎn)餐</a><br>結(jié)賬:<ahref="bill.jsp">結(jié)賬</a></head><%!publicStringhandleStr(Strings){try{byte[]bb=s.getBytes("iso-8859-1");s=newString(bb);}catch(Exceptione){}returns;}%><bodybgcolor="f0fff0"><%Stringusername=(String)session.getAttribute("name");if(username==null||username.length()==0){out.print("返回到輸入姓名");}%><%StringBufferorder=(StringBuffer)session.getAttribute("order");Stringorder1=newString(order);doublesum=0;String[]price=order1.split("[^0123456789.]");if(price!=null){for(Stringitem:price){try{sum=sum+Double.parseDouble(item);}catch(NumberFormatExceptione2){}}}%><br><br><%=handleStr(username)%>點(diǎn)的餐:<br><%=handleStr(order1)%><br>總付款:<%=sum%>任務(wù)三應(yīng)用session對象設(shè)計火鍋點(diǎn)餐系統(tǒng)–任務(wù)拓展在session中,有兩種方法可以實(shí)現(xiàn)session失效,分別是“超時限制”使session失效和強(qiáng)制Session失效。Web服務(wù)器采用“超時限制”判斷客戶端是否還在繼續(xù)訪問。在一定時間內(nèi),如果某個客戶端一直沒有請求訪問,那么Web服務(wù)器就會認(rèn)為該客戶端已經(jīng)結(jié)束請求,并且將與該客戶端會話所對應(yīng)的HttpSession對象變成垃圾對象,等待垃圾收集器將其從內(nèi)存中徹底清除。另一種是使用invalidate()方法強(qiáng)制Session對象失效,如表所示getLastAccessedTime()返回客戶端最后一次發(fā)送與這個會話相關(guān)聯(lián)的請求時間getMaxInactiveInterval()以秒為單位返回一個會話內(nèi)兩個請求的最大時間間隔,Servlet容器在客戶訪問期間保存這個會話處于打開狀態(tài)setMaxInactiveInterval(intinterval)以秒為單位指定在服務(wù)器小程序窗口使該會話無效之前的客戶請求之間的最長時間,也就是超時時間任務(wù)四應(yīng)用application對象制作留言板–任務(wù)演示習(xí)近平總書記一直高度重視糧食安全和提倡“厲行節(jié)約、反對浪費(fèi)”的社會風(fēng)尚,今天我們通過留言板來收集廣大市民有關(guān)節(jié)約食糧的主題信息,如圖所示。留言板界面留言信息提交界面留言信息展示界面任務(wù)四應(yīng)用application對象制作留言板–知識準(zhǔn)備application對象Vector類textArea1.

application對象application對象是用來保存所有應(yīng)用程序中的公有數(shù)據(jù),服務(wù)器啟動并且自動創(chuàng)建application對象后,只要服務(wù)器沒有關(guān)閉,或是預(yù)設(shè)時間沒有超時,application對象一直存在,所有用戶可以共享application對象。application是一個實(shí)現(xiàn)了ServletContext接口的類對象,提供了一些方法用來與Web服務(wù)器進(jìn)行信息傳遞。Application內(nèi)置對象的常用方法(1)publicvoidsetAttribute(Stringkey,Objectobj)以鍵/值對的方式,將一個對象的值存放到application中,它是一個全局屬性。(2)publicObjectgetAttribute(Stringkey)根據(jù)名稱去獲取application中存放對象的值,返回值類型是Object,在實(shí)際應(yīng)用時要視其真正類型進(jìn)行轉(zhuǎn)換。(3)publicvoidremoveAttribute(Stringname)指定要移除的屬性名稱(4)publicEnumerationgetAttributeNames()用于獲取應(yīng)用程序作用域范圍內(nèi)所有屬性的枚舉2.

Vector類Vector類是一元集合,可以加入重復(fù)數(shù)據(jù),它的作用和數(shù)組類似,可以保存一系列數(shù)據(jù),它的優(yōu)點(diǎn)是可以很方便地對集合內(nèi)的數(shù)據(jù)進(jìn)行查找、增加。常用的方法有。(1)Vector有三個構(gòu)造方法:publicVector(intinitialCapacity,intcapacityIncrement)publicVector(intinitialCapacity)

publicVector()(2)常用的方法有:add(Vo)方法:把組件添加到向量尾部,同時大小加1。addElementAt(Objectobj,intindex):在Vector類的結(jié)尾添加元素。size():返回Verctor類的元素總數(shù)。elementAt(intindex):取得特定位置的元素,返回值為整型。setElementAt(Objectobj,intindex):重新設(shè)定指定位置的元素。removeElementAt(intindex):刪除指定位置的元素。3.textArea<textarea>標(biāo)簽定義多行的文本輸入控件。常用的屬性:(1)cols:規(guī)定文本區(qū)內(nèi)的可見寬度。(2)rows:規(guī)定文本區(qū)內(nèi)的可見行數(shù)。任務(wù)四應(yīng)用application對象制作留言板–任務(wù)實(shí)施【例3-4-1】實(shí)現(xiàn)創(chuàng)建空的Vector對象,并向其添加元素,移除元素,最后輸出所有元素,如圖3-23所示任務(wù)四應(yīng)用application對象制作留言板–任務(wù)實(shí)施任務(wù)要求:(1)用戶通過input.jsp向messagepane.jsp頁面提交姓名、留言標(biāo)題和留言內(nèi)容。(2)messagepane.jsp頁面獲取這些內(nèi)容后,用同步方法將這些內(nèi)容添加到一個向量中,然后將這個向量再添加到application對象中。

(3)當(dāng)用戶點(diǎn)擊查看留言板時,show.jsp負(fù)責(zé)顯示所有用戶的留言內(nèi)容,application對象中取出向量,然后遍歷向量中存儲的信息。第一步:創(chuàng)建input.jsp,用于輸入姓名、留言標(biāo)題和留言內(nèi)容<bodybgcolor=“f0fff0”><formaction="messagepane.jsp"method="post"name="form">輸入名字:<br><inputtype="text"name="name"><br>留言標(biāo)題:<br><inputtype="text"name="title"><br>留言:<br><textarearows="10"cols="36"name="messages">任務(wù)四應(yīng)用application對象制作留言板–任務(wù)實(shí)施</textarea><br><inputtype="submit"value="提交信息"name="submit"></form><formaction="show.jsp"method="post"name="form1"><inputtype="submit"value="查看留言板"name="look"></form></body>第二步:創(chuàng)建messagepane.jsp,獲取留言的信息<bodybgcolor="f0fff0"><%!Vectorv=newVector();inti=0;ServletContextapplication;synchronizedvoidleaveWord(Strings){application=getServletContext();任務(wù)四應(yīng)用application對象制作留言板–任務(wù)實(shí)施i++;v.add("no."+i+","+s);application.setAttribute("mess",v);}%><%Stringname=request.getParameter("name");Stringtitle=request.getParameter("title");Stringmessages=request.getParameter("messages");if(name==null)name="無名";if(title==null)title="無標(biāo)題";if(messages==null)messages="無信息";Strings=name+"#"+title+"#"+messages;leaveWord(s);out.print("你的信息已經(jīng)提交!");%><ahref="input.jsp">返回留言頁面</a></body>任務(wù)四應(yīng)用application對象制作留言板–任務(wù)實(shí)施第三步:創(chuàng)建show.jsp,顯示所有用戶的留言內(nèi)容<%!publicStringhandlestr(Strings){try{byte[]bb=s.getBytes("iso-8859-1");s=newString(bb);}catch(Exceptione){}returns;}%><bodybgcolor="f0fff0"><%Vectorv=(Vector)application.getAttribute("mess");for(inti=0;i<v.size();i++){Stringmessage=(String)v.elementAt(i);String[]a=message.split("#");out.print("留言人:"+handlestr(a[0])+",");out.print("標(biāo)題:"+handlestr(a[1])+"<br>");out.print("留言內(nèi)容:<br>"+handlestr(a[2]));out.print("<br><br>");}%></body>任務(wù)四應(yīng)用application對象制作留言板–任務(wù)拓展getInitParameter和getInitParameterNames方法用于獲取配置的應(yīng)用程序參數(shù),應(yīng)用程序的參數(shù)配置在web.xml中,放在</web-app>前面,使用的節(jié)點(diǎn)是<context-param>。publicStringgetInitParameter(Stringname)getInitParameter方法返回指定屬性名稱對應(yīng)的應(yīng)用程序初始值,如果沒有參數(shù)就返回nullpublicEnumerationgetInitParameterNames()getInitParameterNames方法獲取所有初始化參數(shù)的枚舉案例1:在應(yīng)用程序中設(shè)置作者信息,并顯示在頁面任務(wù)四應(yīng)用application對象制作留言板–任務(wù)拓展第一步web.xml配置如下參數(shù)<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns:xsi="/2001/XMLSchema-instance"xmlns="/xml/ns/javaee"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_3_1.xsd"id="WebApp_ID"version="3.1"><context-param><param-name>author</param-name><param-value>麗麗</param-value></context-param></web-app>任務(wù)四應(yīng)用application對象制作留言板–任務(wù)拓展案例1:在應(yīng)用程序中設(shè)置作者信息,并顯示在頁面第二步

getInitParameterdemo.jsp代碼<%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""/TR/html4/loose.dtd"><html><head><metahttp-equiv="Content-Type"content="text/html;charset=UTF-8"><title>JavaWeb項(xiàng)目開發(fā)</title></head><body>本書的作者是:<%=application.getInitParameter("author")%></body></html>任務(wù)四應(yīng)用application對象制作留言板–任務(wù)拓展案例2:《神童詩·四喜》中寫到:“久旱逢甘雨,他鄉(xiāng)遇故知,洞房花燭夜,金榜題名時”。編寫程序,在應(yīng)用程序中初始化為人生四大喜事的信息,并顯示在頁面,如圖所示。第一步web.xml配置如下參數(shù)<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns:xsi="/2001/XMLSchema-instance"xmlns="/xml/ns/javaee"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_3_1.xsd"id="WebApp_ID"version="3.1"><context-param>

<param-name>第一喜</param-name><param-value>久旱逢甘雨</param-value></context-param><context-param><param-name>第二喜</param-name><param-value>他鄉(xiāng)遇故知</param-value></context-param>

<context-param><param-name>第三喜</param-name><param-value>洞房花燭夜</param-value></context-param><context-param><param-name>第四喜</param-name><param-value>金榜題名時</param-value></context-param></web-app>任務(wù)四應(yīng)用application對象制作留言板–任務(wù)拓展第二步getInitParameterNamesdemo.jsp代碼<%@pageimport="java.util.Enumeration"%><body><%Enumeration<String>paraNames=application.getInitParameterNames();while(paraNames.hasMoreElements()){ Stringname=paraNames.nextElement(); Stringvalue=application.getInitParameter(name); out.print(name+":"+value+"</br>");}%></body></html>任務(wù)五應(yīng)用Cookie對象制作站點(diǎn)計數(shù)器–知識準(zhǔn)備應(yīng)用Cookie制作站點(diǎn)計數(shù)器,當(dāng)一個用戶第一次訪問時,id通過Cookie傳送給用戶,用戶再次來訪問時,網(wǎng)站把該用戶id對應(yīng)的計數(shù)器加1,統(tǒng)計出用戶的訪問次數(shù),如圖所示。任務(wù)五應(yīng)用Cookie對象制作站點(diǎn)計數(shù)器–知識準(zhǔn)備Cookie對象的讀取Cookie

常?的?法Cookie對象的創(chuàng)建CookieCookie是服務(wù)端在HTTP響應(yīng)中附帶傳給瀏覽器的?個??本?件,?旦瀏覽器保存了某個Cookie,在之后的請求和響應(yīng)過程中,會將此Cookie來回傳遞,這樣就可以通過Cookie這個載體完成客戶端和服務(wù)端的數(shù)據(jù)交互。Cookie給網(wǎng)站和用戶帶來的好處非常多,具體如下:(1)Cookie能使站點(diǎn)跟蹤特定訪問者的訪問次數(shù),最后訪問時間和訪問者進(jìn)入站點(diǎn)的路徑。(2)Cookie能告訴在線廣告商廣告被點(diǎn)擊的次數(shù),從而可以更精確地投放廣告。(3)Cookie有效期限未到時,用戶無需重復(fù)輸入密碼和用戶名,就可以直接進(jìn)入曾經(jīng)瀏覽過的一些站點(diǎn)。(4)Cookie能幫助站點(diǎn)統(tǒng)計用戶個人資料,以實(shí)現(xiàn)各種各樣的個性化服務(wù)。1.Cookie對象的創(chuàng)建調(diào)用Cookie對象的構(gòu)造函數(shù)可以創(chuàng)建Cookie。Cookie對象的構(gòu)造函數(shù)有兩個字符串參數(shù):Cookie名字和Cookie值。創(chuàng)建Cookie的語法格式如下:Cookiecookie=newCookie("name","tom");response.addCookie(cookie);讀取保存到客戶端的Cookie對象,使用request對象的getCookies()方法,執(zhí)行時將所有客戶端傳來的Cookie對象以數(shù)組的形式排列,如果要取出符合需要的Cookie對象,就需要循環(huán)比較數(shù)組內(nèi)每個對象的關(guān)鍵字?;痉椒ㄈ缦拢篊ookie[]cookies=request.getCookies();for(Cookiecookie:cookies){out.write(cookie.getName()+":"+cookie.getValue()+"<br/>");}2.Cookie對象的讀取3.Cookie

常?的?法方法名功能voidsetMaxAge(intage)

設(shè)置Cookie的有效時間,單位為秒intgetMaxAge()

獲取Cookie的有效時間StringgetName()獲取Cookie的nameStringgetValue()獲取Cookie的value【案例3-5-1】Cookie對象的創(chuàng)建與遍歷第一步創(chuàng)建Cookiedemo.jsp<bodybgcolor="f0fff0"><%Cookiecoo=newCookie("name","admin");Cookiecoo1=newCookie("age","18");Cookiecoo2=newCookie("s

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論