![Java Web程序設(shè)計(jì) 課件 第6章 JSP內(nèi)置對(duì)象_第1頁](http://file4.renrendoc.com/view11/M01/20/33/wKhkGWekFoqAFtH_AAFaemSd0vc452.jpg)
![Java Web程序設(shè)計(jì) 課件 第6章 JSP內(nèi)置對(duì)象_第2頁](http://file4.renrendoc.com/view11/M01/20/33/wKhkGWekFoqAFtH_AAFaemSd0vc4522.jpg)
![Java Web程序設(shè)計(jì) 課件 第6章 JSP內(nèi)置對(duì)象_第3頁](http://file4.renrendoc.com/view11/M01/20/33/wKhkGWekFoqAFtH_AAFaemSd0vc4523.jpg)
![Java Web程序設(shè)計(jì) 課件 第6章 JSP內(nèi)置對(duì)象_第4頁](http://file4.renrendoc.com/view11/M01/20/33/wKhkGWekFoqAFtH_AAFaemSd0vc4524.jpg)
![Java Web程序設(shè)計(jì) 課件 第6章 JSP內(nèi)置對(duì)象_第5頁](http://file4.renrendoc.com/view11/M01/20/33/wKhkGWekFoqAFtH_AAFaemSd0vc4525.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第6章JSP內(nèi)置對(duì)象主講人:2025/2/612025/2/6《Web程序設(shè)計(jì)》21JSP對(duì)象2out對(duì)象3request對(duì)象4response對(duì)象5session對(duì)象6application對(duì)象7其他對(duì)象及綜合示例本章課程目標(biāo)知識(shí)目標(biāo)掌握J(rèn)SP內(nèi)置對(duì)象基本屬性及方法、使用方法;能力要求:能夠理解并掌握Web程序設(shè)計(jì)中的基礎(chǔ)知識(shí)與工作原理,將知識(shí)與原理應(yīng)用于開發(fā)過程中的問題分析;具備復(fù)雜問題的分析與綜合能力,能夠綜合運(yùn)用所學(xué)知識(shí),分析關(guān)鍵需求,設(shè)計(jì)適用于復(fù)雜問題的解決方案;2025/2/6《Web程序設(shè)計(jì)》36.1JSP內(nèi)置對(duì)象JSP內(nèi)置對(duì)象是Web容器創(chuàng)建的一組對(duì)象,開發(fā)人員在進(jìn)行JSP頁面編程時(shí),不需要使用new關(guān)鍵字進(jìn)行實(shí)例化,就可以使用的一組內(nèi)置對(duì)象。由于這些對(duì)象是由容器在初始化時(shí)隱式創(chuàng)建的,因此,這些內(nèi)置對(duì)象也稱為JSP隱式對(duì)象。JSP中的內(nèi)置對(duì)象有:out、request、response、session、application、config、pageContext、page、exception2025/2/6《Web程序設(shè)計(jì)》4特點(diǎn)這些內(nèi)置對(duì)象具有以下特點(diǎn):
由JSP容器提供實(shí)例化,程序開發(fā)人員無需實(shí)例化即可使用;
由JSP容器管理其生命周期,創(chuàng)建和銷毀;
所有的JSP頁面均可使用這些內(nèi)置對(duì)象;
只有在腳本元素的表達(dá)式或代碼段中才可使用(<%=使用內(nèi)置對(duì)象%>或<%使用內(nèi)置對(duì)象%>)。2025/2/6《Web程序設(shè)計(jì)》5示例2025/2/6《Web程序設(shè)計(jì)》6//設(shè)置請(qǐng)求字符的編碼格式request.setCharacterEncoding("utf-8");//獲取login.jsp頁面表單元素的值,參數(shù)名稱和表單元素名稱一致Stringsname=request.getParameter("sname");Stringpasswd=request.getParameter("passwd");if(sname!=null&&!sname.equals("")&&passwd!=null&&!passwd.equals("")){out.println("登陸成功!"+"<br>");out.println("賬號(hào):"+sname+"<br>");out.println("密碼:"+passwd+"<br>");}else{out.println("登錄失??!");}工作機(jī)制JSP頁面在被客戶端請(qǐng)求時(shí),容器首先判斷該JSP頁面是否為第一次訪問,如果是第一次,則初始化該JSP頁面:即生成JSP頁面的java文件,編譯為class,然后執(zhí)行這個(gè)class文件,產(chǎn)生響應(yīng)后的HTML代碼,返回給客戶端。2025/2/6《Web程序設(shè)計(jì)》7publicfinalclassindex_jspextendsorg.apache.jasper.runtime.HttpJspBaseimplementsorg.apache.jasper.runtime.JspSourceDependent,org.apache.jasper.runtime.JspSourceImports{
publicvoid_jspInit(){}publicvoid_jspDestroy(){}publicvoid_jspService(){finaljavax.servlet.jsp.PageContextpageContext;javax.servlet.http.HttpSessionsession=null;finaljavax.servlet.ServletContextapplication;finaljavax.servlet.ServletConfigconfig;javax.servlet.jsp.JspWriterout=null;finaljava.lang.Objectpage=this;javax.servlet.jsp.JspWriter_jspx_out=null;try{
}}2025/2/6《Web程序設(shè)計(jì)》81JSP對(duì)象2out對(duì)象3request對(duì)象4response對(duì)象5session對(duì)象6application對(duì)象7其他對(duì)象及綜合示例out簡(jiǎn)介out是javax.servlet.jsp.JspWriter類的實(shí)例化對(duì)象,主要功能就是完成頁面的輸出操作,將計(jì)算結(jié)果和從數(shù)據(jù)庫中獲取的數(shù)值輸出到網(wǎng)頁上,使用println()或print()方法輸出,形成最終返回給客戶端的HTML代碼。2025/2/6《Web程序設(shè)計(jì)》9方法作用publicvoidprintln()向客戶端打印字符串,帶’\n’publicvoidprint()向客戶端打印字符串publicvoidclear()清除緩存區(qū)的內(nèi)容,如果在flush之后調(diào)用會(huì)拋出異常。publicvoidclearBuffer()清除緩存區(qū)的內(nèi)容,如果在flush之后調(diào)用不會(huì)拋出異常publicvoidflush()將緩存區(qū)內(nèi)容輸出到客戶端publicintgetBufferSize()返回緩存區(qū)的大小以字節(jié)數(shù)的大小,如不設(shè)緩存區(qū)則為0publicbooleanisAutoFlush()返回緩存區(qū)滿時(shí),是自動(dòng)清空還是拋出異常publicvoidclose()關(guān)閉輸出流out使用示例out對(duì)象在使用時(shí)通常使用out.println()或out.print()輸出文本信息。直接輸出時(shí),可采用”<%=xxx%>”方式替代。2025/2/6《Web程序設(shè)計(jì)》10<div><%out.println(“helloworld”);%><!--采用out.println()輸出--></div><!--等同于下面這種方式--><div><%=“helloworld”%><!--采用<%=%>輸出--></div>楊輝三角形示例輸出的主要思路如下:指定n行,循環(huán)n次,每次輸出其中的一行;采用一個(gè)二維數(shù)組存儲(chǔ)楊輝三角形的值;在處理每一行時(shí),先輸出每一行前面的空格(由于HTML會(huì)將連續(xù)的“”看成一個(gè),所以此處使用
字符);計(jì)算每行中的楊輝三角數(shù)值,然后輸出該數(shù)值;輸出換行符(由于HTML不會(huì)輸出”\n”,因此采用<br>進(jìn)行換行)。完整的示例代碼如下所示:2025/2/6《Web程序設(shè)計(jì)》112025/2/6《Web程序設(shè)計(jì)》12<%!intn=10;//以10為例int[][]a=newint[n][n];inti,j;%><%for(i=0;i<n;i++){//循環(huán)n次,輸出n行//輸出前導(dǎo)空格for(j=0;j<n-i;j++)out.print(" ");//計(jì)算輸出數(shù)字for(j=0;j<i;j++){if(i==0||j==0||i==j){a[i][j]=1;}else{a[i][j]=a[i-1][j]+a[i-1][j-1];}out.print("<spanclass='cell'>"+a[i][j]+"</span>");//每個(gè)數(shù)字后面2個(gè)空格}out.println("<br>");//輸出后面的換行標(biāo)記,注意輸出"\n"不能使網(wǎng)頁上的文本換行}%>2025/2/6《Web程序設(shè)計(jì)》131JSP對(duì)象2out對(duì)象3request對(duì)象4response對(duì)象5session對(duì)象6application對(duì)象7其他對(duì)象及綜合示例6.3request對(duì)象request對(duì)象是javax.servlet.http.HttpServletRequest類的實(shí)例。每當(dāng)客戶端請(qǐng)求一個(gè)JSP頁面時(shí),JSP引擎就會(huì)制造一個(gè)新的request對(duì)象來代表這個(gè)請(qǐng)求。請(qǐng)求中一般包含了請(qǐng)求所需的參數(shù)值或者信息。因此,可以通過request來獲取客戶端和服務(wù)端的信息,如傳遞參數(shù)名和參數(shù)值、IP地址、應(yīng)用系統(tǒng)名,服務(wù)器主機(jī)名等。2025/2/6《Web程序設(shè)計(jì)》14request對(duì)象常用方法Cookie[]getCookies()返回客戶端所有的Cookie的數(shù)組EnumerationgetAttributeNames()返回request對(duì)象的所有屬性名稱的集合EnumerationgetHeaderNames()返回所有HTTP頭的名稱集合EnumerationgetParameterNames()返回請(qǐng)求中所有參數(shù)的集合HttpSessiongetSession()返回request對(duì)應(yīng)的session對(duì)象,如果沒有,則創(chuàng)建一個(gè)ObjectgetAttribute(Stringname)返回名稱為name的屬性值,如果不存在則返回null。StringgetParameter(Stringname)返回此request中name指定的參數(shù),若不存在則返回nullString[]getParameterValues(Stringname)返回指定名稱的參數(shù)的所有值,若不存在則返回nullStringgetHeader(Stringname)返回name指定的信息頭StringgetProtocol()返回此request所使用的協(xié)議名和版本StringgetContextPath()返回requestURI中指明的上下文路徑StringgetRemoteAddr()返回客戶端的IP地址StringgetRequestURI()返回request的URIintgetContentLength()返回request主體所包含的字節(jié)數(shù),若未知的返回-12025/2/6《Web程序設(shè)計(jì)》15request對(duì)象的主要作用體現(xiàn)在兩個(gè)方面。1)獲取請(qǐng)求中的參數(shù)值,主要通過request.getParameter(paramName)和request.getParameterValues(paramName)按參數(shù)名稱獲取,前者為獲取單個(gè)值,后者通常用于獲取多個(gè)值,例如多選框checkbox選中的值。請(qǐng)求中的參數(shù)值通過是采用映射表的形式存儲(chǔ),即key-value對(duì),key為參數(shù)名稱,對(duì)應(yīng)表單元素的name或請(qǐng)求url中的參數(shù)名稱,value為該參數(shù)的值;2)獲取請(qǐng)求中的請(qǐng)求頭參數(shù)(Headers),主要通過request.getHeader(paramName),請(qǐng)求頭是HTTP協(xié)議規(guī)定的必要內(nèi)容,通常用于標(biāo)識(shí)該請(qǐng)求的一些相應(yīng)設(shè)置2025/2/6《Web程序設(shè)計(jì)》16requestheaders2025/2/6《Web程序設(shè)計(jì)》17request請(qǐng)求處理當(dāng)客戶端通過超鏈接的形式發(fā)送請(qǐng)求時(shí),可以為該請(qǐng)求傳遞參數(shù),通過在超鏈接的后面加上問號(hào)“?”來實(shí)現(xiàn)。如果要同時(shí)指定多個(gè)參數(shù),各參數(shù)間使用與符號(hào)“&”分隔即可。2025/2/6《Web程序設(shè)計(jì)》18<ahref=”detail.jsp?id=3320183901&from_module=22”>查看商品</a><!--detail.jsp--><%Stringid=request.getParameter(“id”);Stringmodule=request.getParameter(“from_module”);%>get與post請(qǐng)求通過form表單方式傳遞參數(shù)時(shí),有個(gè)非常重要的屬性method。method有兩個(gè)值,分別是get和post。get:以明文的方式通過URL提交數(shù)據(jù),數(shù)據(jù)在URL中可以看到。提交的數(shù)據(jù)最多不超過2KB。安全性較低但效率比post方式高。適合提交數(shù)據(jù)量不大,安全性不高的數(shù)據(jù)。如:搜索、查詢等功能。post:將用戶提交的信息封裝在HTMLheader內(nèi)。適合提交數(shù)據(jù)量大,安全性高的用戶信息。比如:注冊(cè)、修改、上傳等功能。2025/2/6《Web程序設(shè)計(jì)》19中文參數(shù)值處理由于JSP頁面默認(rèn)使用iso-8859-1字符集,而中文字符集一般使用GBK或utf-8,因此容易出現(xiàn)中文亂碼的情況。在JSP頁面中處理中文亂碼的情況需要注意以下幾個(gè)方面(以u(píng)tf-8字符集為例,GBK亦然):確認(rèn)HTML編碼字符集與JSP的contentType均為utf-8字符集JSP頁面的保存文本字符集也要設(shè)置為utf-8字符集;在處理請(qǐng)求參數(shù)的頁面,對(duì)獲取到的中文參數(shù)值進(jìn)行解碼處理2025/2/6《Web程序設(shè)計(jì)》20request.setCharacterEncoding(“utf-8”);Stringname=request.getParameter(“item_name”);Stringname=newString(request.getParameter("item_name").getBytes("ISO-8859-1"),"utf-8")設(shè)置cookiecookie是用來存儲(chǔ)小段的文本信息,在網(wǎng)絡(luò)服務(wù)器上生成,并發(fā)送給瀏覽器的。通過使用cookie可以標(biāo)識(shí)用戶身份,記錄用戶名和密碼,跟蹤重復(fù)用戶等。瀏覽器將cookie以key/value的形式保存到客戶機(jī)的某個(gè)指定目錄中。2025/2/6《Web程序設(shè)計(jì)》21//寫入cookie對(duì)象Stringusername=request.getParameter(“username”);Cookiecookie=newCookie("username",username);//創(chuàng)建并實(shí)例化cookie對(duì)象cookie.setMaxAge(60*60*24*7);//設(shè)置cookie有效期為7天response.addCookie(cookie);//保存cookie對(duì)象//讀取cookie值Cookie[]cookies=request.getCookies();//從request中獲取cookie對(duì)象的集合Stringusername="";if(cookies!=null){//遍歷cookie對(duì)象集合for(CookiecookieItem:cookies){if(cookieItem.getName().equals("username")){username=cookieItem.getValue();//讀取cookie對(duì)象的的值}}}用戶名:<inputtype=”text”name=”username”value=”<%=username%>”>request使用示例2025/2/6《Web程序設(shè)計(jì)》22注冊(cè)頁面(ex_req.jsp)提交查看頁面(ex_req_save.jsp)2025/2/6《Web程序設(shè)計(jì)》23<formaction="ex_req_save.jsp"method="post"><div>用戶:<inputtype="text"name="username"></div><div>密碼:<inputtype="password"name="password"></div><div>確認(rèn):<inputtype="password"name="password2"></div><div>性別:<inputtype="radio"name="sex"value="1"checked="checked">男<inputtype="radio"name="sex"value="0">女</div><div>郵箱:<inputtype="text"name="email"></div><div>課程:<inputtype="checkbox"name="subject"value="0"/>計(jì)算機(jī)視覺<inputtype="checkbox"name="subject"value="1"/>人工智能<inputtype="checkbox"name="subject"value="2"/>自然語言處理<inputtype="checkbox"name="subject"value="3"/>數(shù)據(jù)可視化</div><div>簡(jiǎn)介:<textareaname="intro"cols="60"rows="8"></textarea></div><div><inputtype="submit"value="提交查看"></div><%!/*自定義函數(shù),將字符串轉(zhuǎn)碼為中文*/publicstaticStringtoCN(Stringstr){if(str==null)returnstr;try{str=newString(str.getBytes("iso-8859-1"),"utf-8");}catch(UnsupportedEncodingExceptione){e.printStackTrace();}returnstr;}%><%//獲取單個(gè)值使用getParameter方法
Stringusername=toCN(request.getParameter("username"));Stringpassword=request.getParameter("password");Stringpassword2=request.getParameter("password2");Stringsex=request.getParameter("sex");Stringintro=toCN(request.getParameter("intro"));//獲取多個(gè)值使用getParameterValues方法,返回值是字符串?dāng)?shù)組
String[]subjects=request.getParameterValues("subject");if("0".equals(sex.trim())){sex="女";}else{sex="男";}
2025/2/6《Web程序設(shè)計(jì)》241JSP對(duì)象2out對(duì)象3request對(duì)象4response對(duì)象5session對(duì)象6application對(duì)象7其他對(duì)象及綜合示例6.4response對(duì)象response對(duì)象用于響應(yīng)客戶請(qǐng)求,向客戶端輸出信息。response對(duì)象屬于javax.servlet.http.HttpServletResponse接口的實(shí)例。它封裝了JSP產(chǎn)生的響應(yīng),并發(fā)送到客戶端以響應(yīng)客戶端的請(qǐng)求。請(qǐng)求的數(shù)據(jù)可以是各種數(shù)據(jù)類型,甚至是文件。當(dāng)服務(wù)器創(chuàng)建request對(duì)象時(shí)會(huì)同時(shí)創(chuàng)建用于響應(yīng)這個(gè)客戶端的response對(duì)象。response對(duì)象的主要作用是對(duì)客戶端的請(qǐng)求進(jìn)行回應(yīng),將Web服務(wù)器處理后的結(jié)果發(fā)回給客戶端。2025/2/6《Web程序設(shè)計(jì)》25HTTP協(xié)議響應(yīng)信息響應(yīng)頭描述Allow指定服務(wù)器支持的request方法(GET,POST等等)Cache-Control指定響應(yīng)文檔能夠被安全緩存的情況。通常取值為public,private或no-cache等等。Public意味著文檔可緩存,Private意味著文檔只為單用戶服務(wù)并且只能使用私有緩存。No-cache意味著文檔不被緩存。Connection命令瀏覽器是否要使用持久的HTTP連接。close值
命令瀏覽器不使用持久HTTP連接,而keep-alive意味著使用持久化連接。Content-Disposition讓瀏覽器要求用戶將響應(yīng)以給定的名稱存儲(chǔ)在磁盤中Content-Encoding指定傳輸時(shí)頁面的編碼規(guī)則Content-Language表述文檔所使用的語言,比如en,en-us,,ru等等Content-Length表明響應(yīng)的字節(jié)數(shù)。只有在瀏覽器使用持久化(keep-alive)HTTP連接時(shí)才有用Content-Type表明文檔使用的MIME類型Expires指明啥時(shí)候過期并從緩存中移除Last-Modified指明文檔最后修改時(shí)間??蛻舳丝梢跃彺嫖臋n并且在后續(xù)的請(qǐng)求中提供一個(gè)If-Modified-Since請(qǐng)求頭Location在300秒內(nèi),包含所有的有一個(gè)狀態(tài)碼的響應(yīng)地址,瀏覽器會(huì)自動(dòng)重連然后檢索新文檔Refresh指明瀏覽器每隔多久請(qǐng)求更新一次頁面。Retry-After與503(ServiceUnavailable)一起使用來告訴用戶多久后請(qǐng)求將會(huì)得到響應(yīng)Set-Cookie指明當(dāng)前頁面對(duì)應(yīng)的cookie2025/2/6《Web程序設(shè)計(jì)》26響應(yīng)示例2025/2/6《Web程序設(shè)計(jì)》27response對(duì)象的主要方法方法描述StringencodeURL(Stringurl)將URL編碼,回傳包含SessionID的URLvoidaddCookie(Cookiecookie)添加指定的cookie至響應(yīng)中voidaddHeader(Stringname,Stringvalue)添加指定名稱的響應(yīng)頭和值voidreset()清除任何緩存中的任何數(shù)據(jù),包括狀態(tài)碼和各種響應(yīng)頭voidsendError(intsc,Stringmsg)使用指定的狀態(tài)碼和消息向客戶端發(fā)送一個(gè)出錯(cuò)響應(yīng)voidsendRedirect(Stringlocation)使用指定的URL向客戶端發(fā)送一個(gè)臨時(shí)的間接響應(yīng)voidsetCharacterEncoding(Stringcharset)指定響應(yīng)的編碼集(MIME字符集),例如UTF-8voidsetContentType(Stringtype)設(shè)置響應(yīng)的內(nèi)容的類型,如果響應(yīng)還未被提交的話voidsetHeader(Stringname,Stringvalue)使用指定名稱和值設(shè)置響應(yīng)頭的名稱和內(nèi)容2025/2/6《Web程序設(shè)計(jì)》28重定向網(wǎng)頁使用response對(duì)象提供的sendRedirect()方法可以將網(wǎng)頁重定向到另一個(gè)頁面。在客戶端瀏覽器上將會(huì)得到跳轉(zhuǎn)的地址,并重新發(fā)送請(qǐng)求鏈接。用戶可以從瀏覽器的地址欄中看到跳轉(zhuǎn)后的地址。進(jìn)行重定向操作后,request中的屬性全部失效,并且重新創(chuàng)建一個(gè)新的request對(duì)象。2025/2/6《Web程序設(shè)計(jì)》29sendRedirect()方法的語法格式如下:2025/2/6《Web程序設(shè)計(jì)》30response.sendRedirect(Stringpath);參數(shù)說明:path:用于指定目標(biāo)路徑,可以是相對(duì)路徑,也可以是不同主機(jī)的其他URL地址。<%response.sendRedirect(“l(fā)ogin.jsp");//重定向到登錄頁面%>通過response對(duì)象可以設(shè)置HTTP響應(yīng)報(bào)頭。1)禁用緩存2)設(shè)置頁面自動(dòng)刷新3)設(shè)置定時(shí)跳轉(zhuǎn)網(wǎng)頁2025/2/6《Web程序設(shè)計(jì)》31<%response.setHeader("Cache-Control","no-store");//設(shè)置沒有緩存response.setDateHeader("Expires",0);//設(shè)置緩存過期日期為0%><%response.setHeader("refresh","10");//單位為秒%><%response.setHeader("refresh","5;URL=login.jsp");//單位為秒%>response使用示例2025/2/6《Web程序設(shè)計(jì)》32<body><%Stringmsg=null,url=null;//獲取輸入的登錄信息
Stringusername=request.getParameter("username");Stringpassword=request.getParameter("password");if(username==null||"".equals(username)){msg="用戶名不能為空";url="login.jsp";}elseif(password==null||"".equals(password)||password.length()<6){msg="密碼不能為空或長(zhǎng)度過短";url="login.jsp";}else{msg="登錄成功,即將跳轉(zhuǎn)至系統(tǒng)首頁!";url="index.jsp";}out.println(msg);//顯示提示信息,設(shè)置5秒后自動(dòng)跳轉(zhuǎn)
response.setHeader("refresh","5;URL="+url);%></body>check.jsplogin.jspindex.jsp失敗成功2025/2/6《Web程序設(shè)計(jì)》331JSP對(duì)象2out對(duì)象3request對(duì)象4response對(duì)象5session對(duì)象6application對(duì)象7其他對(duì)象及綜合示例session簡(jiǎn)介session表示客戶端與服務(wù)器的一次會(huì)話,是javax.servlet.http.HttpSession接口的實(shí)例化對(duì)象。Web中的session指定是用戶在瀏覽某個(gè)網(wǎng)站時(shí),從進(jìn)入網(wǎng)站到瀏覽器關(guān)閉所經(jīng)過的這段時(shí)間,與用戶相關(guān)的所有信息都被保存在session中,因此,JSP中使用session對(duì)象存儲(chǔ)與用戶一次會(huì)話相關(guān)的所有信息。HTTP協(xié)議是一種無狀態(tài)的協(xié)議(即不保存連接狀態(tài)的協(xié)議),每次用戶請(qǐng)求在接收到服務(wù)器的響應(yīng)后,連接就關(guān)閉了。為了彌補(bǔ)這一缺點(diǎn),HTTP協(xié)議提供了session。2025/2/6《Web程序設(shè)計(jì)》34Session對(duì)象的常用方法方法描述publicObjectgetAttribute(Stringname)返回session對(duì)象中與指定名稱綁定的對(duì)象,如果不存在則返回nullpublicEnumerationgetAttributeNames()返回session對(duì)象中所有的對(duì)象名稱publicStringgetId()返回session對(duì)象的IDpublicvoidinvalidate()將session無效化,解綁任何與該session綁定的對(duì)象publicbooleanisNew()返回是否為一個(gè)新的客戶端,或者客戶端是否拒絕加入sessionpubliclonggetLastAccessedTime()返回客戶端最后訪問的時(shí)間,以毫秒為單位,從1970年1月1號(hào)凌晨開始算起publicvoidremoveAttribute(Stringname)移除session中指定名稱的對(duì)象publicvoidsetAttribute(Stringname,Objectvalue)使用指定的名稱和值來產(chǎn)生一個(gè)對(duì)象并綁定到session中publicvoidsetMaxInactiveInterval(intinterval)用來指定時(shí)間,以秒為單位,servlet容器將會(huì)在這段時(shí)間內(nèi)保持會(huì)話有效2025/2/6《Web程序設(shè)計(jì)》35session生命周期管理session的生命周期分為三個(gè)階段:創(chuàng)建、活動(dòng)、銷毀。(1)創(chuàng)建當(dāng)客戶端第一次訪問某個(gè)JSP頁面時(shí),服務(wù)器會(huì)為當(dāng)前會(huì)話創(chuàng)建一個(gè)sessionID,每次客戶端向服務(wù)端發(fā)送請(qǐng)求時(shí),都會(huì)將此sessionID一并發(fā)送過去,服務(wù)端會(huì)進(jìn)行校驗(yàn)。(2)活動(dòng)當(dāng)session創(chuàng)建后,客戶端再訪問其它頁面都屬于同一次會(huì)話。只要當(dāng)前會(huì)話頁面沒有全部關(guān)閉,重新打開的新的瀏覽器窗口訪問同一項(xiàng)目資源時(shí),也屬于同一次會(huì)話。除非本次會(huì)話的所有頁面都關(guān)閉后再重新訪問系統(tǒng)某個(gè)頁,將會(huì)創(chuàng)建新的會(huì)話。(3)銷毀session的銷毀只有三種方式:明確調(diào)用session.invalidate()方法、session過期(超時(shí))、服務(wù)器重新啟動(dòng)。這三種方式會(huì)使當(dāng)前的會(huì)話清除。2025/2/6《Web程序設(shè)計(jì)》36Tomcat的默認(rèn)session超時(shí)時(shí)間為30分鐘,可以通過session.setMaxInactiveInterval(time)方法設(shè)置某個(gè)session的超時(shí)時(shí)間。還可以通過web.xml中配置參數(shù)“session-timeout”,這種方法是設(shè)置所有的session超時(shí)時(shí)間。2025/2/6《Web程序設(shè)計(jì)》37<!--web.xml--><session-config>//單位是分鐘
<session-timeout>10</session-timeout></session-config>session使用示例2025/2/6《Web程序設(shè)計(jì)》38<%//獲取會(huì)話信息Stringusername=(String)session.getAttribute("username");DatelastAccessTime=newDate(session.getLastAccessedTime());DatecurTime=newDate();longminuteDiff=(curTime.getTime()-lastAccessTime.getTime())/(1000*60);//如果用戶名不為空,則會(huì)話還在,且與上次訪問時(shí)間相差不超過30分鐘,則正常
if(username!=null&&minuteDiff<30){
}else{//認(rèn)為會(huì)話已超期,跳轉(zhuǎn)到登錄頁面
session.removeAttribute(“username”);session.invalidate();response.sendRedirect("/login.jsp");}%>session.setAttribute(“username”,username);//將用戶名寫入到會(huì)話中注銷用戶的登錄狀態(tài),清空會(huì)話信息2025/2/6《Web程序設(shè)計(jì)》39<!--注銷頁面--><%//清空session中的信息Enumerationelem=session.getAttributeNames();while(elem.hasMoreElements()){Stringname=(String)elem.nextElement();session.removeAttribute(name);}session.invalidate();//跳轉(zhuǎn)至登錄頁面response.sendRedirect(“/login.jsp”);%>2025/2/6《Web程序設(shè)計(jì)》401JSP對(duì)象2out對(duì)象3request對(duì)象4response對(duì)象5session對(duì)象6application對(duì)象7其他對(duì)象及綜合示例6.6application對(duì)象application對(duì)象用于保存所有應(yīng)用中的共有數(shù)據(jù)。它在服務(wù)器啟動(dòng)時(shí)自動(dòng)創(chuàng)建,在服務(wù)器停止時(shí)銷毀。當(dāng)application對(duì)象沒有被銷毀時(shí),所有用戶都可以共享該application對(duì)象。與session對(duì)象相比,application對(duì)象的生命周期更長(zhǎng),類似于系統(tǒng)的“全局變量”。application對(duì)象是javax.servlet.ServletContext接口的實(shí)例化對(duì)象。向application中添加的數(shù)據(jù),該web應(yīng)用的所有JSP文件都能訪問,在任何地方對(duì)application對(duì)象中的數(shù)據(jù)操作,都將影響到其他用戶對(duì)此的訪問。2025/2/6《Web程序設(shè)計(jì)》41application對(duì)象常用方法方法描述publicvoidsetAttribute(Stringname,Objectvalue);使用指定名稱將對(duì)象綁定到此對(duì)話publicObjectgetAttribute(Stringname);返回與此會(huì)話中的指定名稱綁定在一起的對(duì)象,如果沒有對(duì)象綁定在該名稱下,則返回nullEnumerationgetAttributeName();返回所有可用屬性名的枚舉StringsetServerInfo();返回JSP(Servlet)引擎名及版本號(hào)StringgetRealPath(Stringpath);得到虛擬路徑對(duì)應(yīng)的絕對(duì)路徑publicStringgetContextPath();取得當(dāng)前的虛擬路徑名稱2025/2/6《Web程序設(shè)計(jì)》42應(yīng)用內(nèi)共享數(shù)據(jù)通過setAttribute()方法向application中添加數(shù)據(jù),通過getAttribute方法從application中獲取已添加的數(shù)據(jù)。2025/2/6《Web程序設(shè)計(jì)》43<%
//添加數(shù)據(jù)List<String>msgList=bo.getMessageList();application.setAttribute(“messageList”,msgList);
%><%//從application中獲取數(shù)據(jù)List<String>messageList=(List<String>)application.getAttribute(“messageList”);if(messageList!=null){//要判斷是否為空,因?yàn)榭赡苓€未添加}%>訪問應(yīng)用程序初始化參數(shù)application對(duì)象提供了對(duì)應(yīng)用程序初始化參數(shù)進(jìn)行訪問的方法。應(yīng)用程序初始化參數(shù)在web.xml文件中通過<context-param>標(biāo)記配置應(yīng)用程序初始化參數(shù),web.xml位于Web應(yīng)用WEB-INF子目錄中。2025/2/6《Web程序設(shè)計(jì)》44<!--web.xml--><context-param><param-name>url</param-name><param-value>jdbc:mysql://localhost/book_db</param-value></context-param><context-param><param-name>username</param-name><param-value>user</param-value></context-param>//通過參數(shù)名稱獲取單個(gè)參數(shù)Stringurl=application.getInitParameter("url");Stringusername=application.getInitParameter(“username”);//還可以通過參數(shù)枚舉方法進(jìn)行遍歷Enumeration<String>elems=application.getInitParameterNames();//獲取全部初始化參數(shù)while(elems.hasMoreElements()){Stringname=elems.nextElement();//獲取參數(shù)名Stringvalue=application.getInitParameter(name);//獲取參數(shù)值}application使用示例2025/2/6《Web程序設(shè)計(jì)》45<%@pagelanguage="java"contentType="text/html;charset=UTF-8"%><html><head><title>application對(duì)象使用示例</title></head><body><%Integercounter=(Integer)application.getAttribute("counter");if(counter==null||counter==0){//第一次訪問
out.println("歡迎訪問本網(wǎng)頁!");counter=1;}else{//多次訪問
out.println("歡迎再次訪問本網(wǎng)站!");counter+=1;}application.setAttribute("counter",counter);%><div>頁面累計(jì)訪問量為:<%=counter%></div></body></html>這種方式計(jì)數(shù)的問題在哪?2025/2/6《Web程序設(shè)計(jì)》461JSP對(duì)象2out對(duì)象3request對(duì)象4response對(duì)象5session對(duì)象6application對(duì)象7其他對(duì)象及綜合示例其他JSP內(nèi)置對(duì)象pageContext對(duì)象pageContext對(duì)象是一個(gè)比較特殊的對(duì)象,用于獲取頁面上下文信息page對(duì)象page對(duì)象本質(zhì)上是包含當(dāng)前Servlet接口引用的變量,可以看作是this關(guān)鍵字。config對(duì)象config對(duì)象主要用于獲取服務(wù)器的配置信息,實(shí)現(xiàn)了javax.servlet.ServletConfig接口。exception對(duì)象exception對(duì)象用來處理JSP文件執(zhí)行時(shí)發(fā)生的所有錯(cuò)誤和異常,只有在page指令中設(shè)置isErrorPage屬性值為true的頁面中才可以被使用。2025/2/6《Web程序設(shè)計(jì)》47綜合示例用戶登錄頁面為例,業(yè)務(wù)流程如下:2025/2/6《Web程序設(shè)計(jì)》48login.jspchk.jspapplication_page.jsp提交登錄驗(yàn)證成功驗(yàn)證失敗login
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年曝氣轉(zhuǎn)刷合作協(xié)議書
- 人教版八年級(jí)地理上冊(cè)聽課評(píng)課記錄《工業(yè)》
- 聽七年級(jí)英語評(píng)課記錄
- 人教版地理七年級(jí)下冊(cè)6.1《位置和范圍》(第1課時(shí))聽課評(píng)課記錄
- 招送水工合同(2篇)
- 犬舍加盟合同(2篇)
- 五年級(jí)數(shù)學(xué)下冊(cè)蘇教版第四單元第7課《分?jǐn)?shù)與小數(shù)互化》聽評(píng)課記錄
- 岳麓版歷史七年級(jí)下冊(cè)第24課《從貞觀之治到開元盛世》聽課評(píng)課記錄1
- 人民版道德與法治九年級(jí)上冊(cè)8.1《森林的砍伐 空氣污染》聽課評(píng)課記錄
- 湘教版數(shù)學(xué)七年級(jí)下冊(cè)《2.1.1同底冪的乘法》聽評(píng)課記錄
- Starter Unit 1 Hello!說課稿2024-2025學(xué)年人教版英語七年級(jí)上冊(cè)
- Unit 7 第3課時(shí) Section A (Grammar Focus -4c)(導(dǎo)學(xué)案)-【上好課】2022-2023學(xué)年八年級(jí)英語下冊(cè)同步備課系列(人教新目標(biāo)Go For It!)
- 2025年上半年長(zhǎng)沙市公安局招考警務(wù)輔助人員(500名)易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 《教育強(qiáng)國建設(shè)規(guī)劃綱要(2024-2035年)》解讀講座
- 2025河北邯鄲世紀(jì)建設(shè)投資集團(tuán)招聘專業(yè)技術(shù)人才30人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 慈溪高一期末數(shù)學(xué)試卷
- 《基于新課程標(biāo)準(zhǔn)的初中數(shù)學(xué)課堂教學(xué)評(píng)價(jià)研究》
- 省級(jí)產(chǎn)業(yè)園區(qū)基礎(chǔ)設(shè)施項(xiàng)目可行性研究報(bào)告
- 2025年中國東方航空招聘筆試參考題庫含答案解析
- 《微生物燃料電池MF》課件
- 貴州省黔東南州2024年七年級(jí)上學(xué)期數(shù)學(xué)期末考試試卷【附答案】
評(píng)論
0/150
提交評(píng)論