Java Web程序設(shè)計(jì) 課件 第6章 JSP內(nèi)置對象_第1頁
Java Web程序設(shè)計(jì) 課件 第6章 JSP內(nèi)置對象_第2頁
Java Web程序設(shè)計(jì) 課件 第6章 JSP內(nèi)置對象_第3頁
Java Web程序設(shè)計(jì) 課件 第6章 JSP內(nèi)置對象_第4頁
Java Web程序設(shè)計(jì) 課件 第6章 JSP內(nèi)置對象_第5頁
已閱讀5頁,還剩48頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第6章JSP內(nèi)置對象主講人:2025/2/612025/2/6《Web程序設(shè)計(jì)》21JSP對象2out對象3request對象4response對象5session對象6application對象7其他對象及綜合示例本章課程目標(biāo)知識目標(biāo)掌握J(rèn)SP內(nèi)置對象基本屬性及方法、使用方法;能力要求:能夠理解并掌握Web程序設(shè)計(jì)中的基礎(chǔ)知識與工作原理,將知識與原理應(yīng)用于開發(fā)過程中的問題分析;具備復(fù)雜問題的分析與綜合能力,能夠綜合運(yùn)用所學(xué)知識,分析關(guān)鍵需求,設(shè)計(jì)適用于復(fù)雜問題的解決方案;2025/2/6《Web程序設(shè)計(jì)》36.1JSP內(nèi)置對象JSP內(nèi)置對象是Web容器創(chuàng)建的一組對象,開發(fā)人員在進(jìn)行JSP頁面編程時,不需要使用new關(guān)鍵字進(jìn)行實(shí)例化,就可以使用的一組內(nèi)置對象。由于這些對象是由容器在初始化時隱式創(chuàng)建的,因此,這些內(nèi)置對象也稱為JSP隱式對象。JSP中的內(nèi)置對象有:out、request、response、session、application、config、pageContext、page、exception2025/2/6《Web程序設(shè)計(jì)》4特點(diǎn)這些內(nèi)置對象具有以下特點(diǎn):

由JSP容器提供實(shí)例化,程序開發(fā)人員無需實(shí)例化即可使用;

由JSP容器管理其生命周期,創(chuàng)建和銷毀;

所有的JSP頁面均可使用這些內(nèi)置對象;

只有在腳本元素的表達(dá)式或代碼段中才可使用(<%=使用內(nèi)置對象%>或<%使用內(nèi)置對象%>)。2025/2/6《Web程序設(shè)計(jì)》5示例2025/2/6《Web程序設(shè)計(jì)》6//設(shè)置請求字符的編碼格式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("賬號:"+sname+"<br>");out.println("密碼:"+passwd+"<br>");}else{out.println("登錄失?。?);}工作機(jī)制JSP頁面在被客戶端請求時,容器首先判斷該JSP頁面是否為第一次訪問,如果是第一次,則初始化該JSP頁面:即生成JSP頁面的java文件,編譯為class,然后執(zhí)行這個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對象2out對象3request對象4response對象5session對象6application對象7其他對象及綜合示例out簡介out是javax.servlet.jsp.JspWriter類的實(shí)例化對象,主要功能就是完成頁面的輸出操作,將計(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)用會拋出異常。publicvoidclearBuffer()清除緩存區(qū)的內(nèi)容,如果在flush之后調(diào)用不會拋出異常publicvoidflush()將緩存區(qū)內(nèi)容輸出到客戶端publicintgetBufferSize()返回緩存區(qū)的大小以字節(jié)數(shù)的大小,如不設(shè)緩存區(qū)則為0publicbooleanisAutoFlush()返回緩存區(qū)滿時,是自動清空還是拋出異常publicvoidclose()關(guān)閉輸出流out使用示例out對象在使用時通常使用out.println()或out.print()輸出文本信息。直接輸出時,可采用”<%=xxx%>”方式替代。2025/2/6《Web程序設(shè)計(jì)》10<div><%out.println(“helloworld”);%><!--采用out.println()輸出--></div><!--等同于下面這種方式--><div><%=“helloworld”%><!--采用<%=%>輸出--></div>楊輝三角形示例輸出的主要思路如下:指定n行,循環(huán)n次,每次輸出其中的一行;采用一個二維數(shù)組存儲楊輝三角形的值;在處理每一行時,先輸出每一行前面的空格(由于HTML會將連續(xù)的“”看成一個,所以此處使用

字符);計(jì)算每行中的楊輝三角數(shù)值,然后輸出該數(shù)值;輸出換行符(由于HTML不會輸出”\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>");//每個數(shù)字后面2個空格}out.println("<br>");//輸出后面的換行標(biāo)記,注意輸出"\n"不能使網(wǎng)頁上的文本換行}%>2025/2/6《Web程序設(shè)計(jì)》131JSP對象2out對象3request對象4response對象5session對象6application對象7其他對象及綜合示例6.3request對象request對象是javax.servlet.http.HttpServletRequest類的實(shí)例。每當(dāng)客戶端請求一個JSP頁面時,JSP引擎就會制造一個新的request對象來代表這個請求。請求中一般包含了請求所需的參數(shù)值或者信息。因此,可以通過request來獲取客戶端和服務(wù)端的信息,如傳遞參數(shù)名和參數(shù)值、IP地址、應(yīng)用系統(tǒng)名,服務(wù)器主機(jī)名等。2025/2/6《Web程序設(shè)計(jì)》14request對象常用方法Cookie[]getCookies()返回客戶端所有的Cookie的數(shù)組EnumerationgetAttributeNames()返回request對象的所有屬性名稱的集合EnumerationgetHeaderNames()返回所有HTTP頭的名稱集合EnumerationgetParameterNames()返回請求中所有參數(shù)的集合HttpSessiongetSession()返回request對應(yīng)的session對象,如果沒有,則創(chuàng)建一個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對象的主要作用體現(xiàn)在兩個方面。1)獲取請求中的參數(shù)值,主要通過request.getParameter(paramName)和request.getParameterValues(paramName)按參數(shù)名稱獲取,前者為獲取單個值,后者通常用于獲取多個值,例如多選框checkbox選中的值。請求中的參數(shù)值通過是采用映射表的形式存儲,即key-value對,key為參數(shù)名稱,對應(yīng)表單元素的name或請求url中的參數(shù)名稱,value為該參數(shù)的值;2)獲取請求中的請求頭參數(shù)(Headers),主要通過request.getHeader(paramName),請求頭是HTTP協(xié)議規(guī)定的必要內(nèi)容,通常用于標(biāo)識該請求的一些相應(yīng)設(shè)置2025/2/6《Web程序設(shè)計(jì)》16requestheaders2025/2/6《Web程序設(shè)計(jì)》17request請求處理當(dāng)客戶端通過超鏈接的形式發(fā)送請求時,可以為該請求傳遞參數(shù),通過在超鏈接的后面加上問號“?”來實(shí)現(xiàn)。如果要同時指定多個參數(shù),各參數(shù)間使用與符號“&”分隔即可。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請求通過form表單方式傳遞參數(shù)時,有個非常重要的屬性method。method有兩個值,分別是get和post。get:以明文的方式通過URL提交數(shù)據(jù),數(shù)據(jù)在URL中可以看到。提交的數(shù)據(jù)最多不超過2KB。安全性較低但效率比post方式高。適合提交數(shù)據(jù)量不大,安全性不高的數(shù)據(jù)。如:搜索、查詢等功能。post:將用戶提交的信息封裝在HTMLheader內(nèi)。適合提交數(shù)據(jù)量大,安全性高的用戶信息。比如:注冊、修改、上傳等功能。2025/2/6《Web程序設(shè)計(jì)》19中文參數(shù)值處理由于JSP頁面默認(rèn)使用iso-8859-1字符集,而中文字符集一般使用GBK或utf-8,因此容易出現(xiàn)中文亂碼的情況。在JSP頁面中處理中文亂碼的情況需要注意以下幾個方面(以utf-8字符集為例,GBK亦然):確認(rèn)HTML編碼字符集與JSP的contentType均為utf-8字符集JSP頁面的保存文本字符集也要設(shè)置為utf-8字符集;在處理請求參數(shù)的頁面,對獲取到的中文參數(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是用來存儲小段的文本信息,在網(wǎng)絡(luò)服務(wù)器上生成,并發(fā)送給瀏覽器的。通過使用cookie可以標(biāo)識用戶身份,記錄用戶名和密碼,跟蹤重復(fù)用戶等。瀏覽器將cookie以key/value的形式保存到客戶機(jī)的某個指定目錄中。2025/2/6《Web程序設(shè)計(jì)》21//寫入cookie對象Stringusername=request.getParameter(“username”);Cookiecookie=newCookie("username",username);//創(chuàng)建并實(shí)例化cookie對象cookie.setMaxAge(60*60*24*7);//設(shè)置cookie有效期為7天response.addCookie(cookie);//保存cookie對象//讀取cookie值Cookie[]cookies=request.getCookies();//從request中獲取cookie對象的集合Stringusername="";if(cookies!=null){//遍歷cookie對象集合for(CookiecookieItem:cookies){if(cookieItem.getName().equals("username")){username=cookieItem.getValue();//讀取cookie對象的的值}}}用戶名:<inputtype=”text”name=”username”value=”<%=username%>”>request使用示例2025/2/6《Web程序設(shè)計(jì)》22注冊頁面(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>簡介:<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;}%><%//獲取單個值使用getParameter方法

Stringusername=toCN(request.getParameter("username"));Stringpassword=request.getParameter("password");Stringpassword2=request.getParameter("password2");Stringsex=request.getParameter("sex");Stringintro=toCN(request.getParameter("intro"));//獲取多個值使用getParameterValues方法,返回值是字符串?dāng)?shù)組

String[]subjects=request.getParameterValues("subject");if("0".equals(sex.trim())){sex="女";}else{sex="男";}

2025/2/6《Web程序設(shè)計(jì)》241JSP對象2out對象3request對象4response對象5session對象6application對象7其他對象及綜合示例6.4response對象response對象用于響應(yīng)客戶請求,向客戶端輸出信息。response對象屬于javax.servlet.http.HttpServletResponse接口的實(shí)例。它封裝了JSP產(chǎn)生的響應(yīng),并發(fā)送到客戶端以響應(yīng)客戶端的請求。請求的數(shù)據(jù)可以是各種數(shù)據(jù)類型,甚至是文件。當(dāng)服務(wù)器創(chuàng)建request對象時會同時創(chuàng)建用于響應(yīng)這個客戶端的response對象。response對象的主要作用是對客戶端的請求進(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)以給定的名稱存儲在磁盤中Content-Encoding指定傳輸時頁面的編碼規(guī)則Content-Language表述文檔所使用的語言,比如en,en-us,,ru等等Content-Length表明響應(yīng)的字節(jié)數(shù)。只有在瀏覽器使用持久化(keep-alive)HTTP連接時才有用Content-Type表明文檔使用的MIME類型Expires指明啥時候過期并從緩存中移除Last-Modified指明文檔最后修改時間。客戶端可以緩存文檔并且在后續(xù)的請求中提供一個If-Modified-Since請求頭Location在300秒內(nèi),包含所有的有一個狀態(tài)碼的響應(yīng)地址,瀏覽器會自動重連然后檢索新文檔Refresh指明瀏覽器每隔多久請求更新一次頁面。Retry-After與503(ServiceUnavailable)一起使用來告訴用戶多久后請求將會得到響應(yīng)Set-Cookie指明當(dāng)前頁面對應(yīng)的cookie2025/2/6《Web程序設(shè)計(jì)》26響應(yīng)示例2025/2/6《Web程序設(shè)計(jì)》27response對象的主要方法方法描述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ā)送一個出錯響應(yīng)voidsendRedirect(Stringlocation)使用指定的URL向客戶端發(fā)送一個臨時的間接響應(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對象提供的sendRedirect()方法可以將網(wǎng)頁重定向到另一個頁面。在客戶端瀏覽器上將會得到跳轉(zhuǎn)的地址,并重新發(fā)送請求鏈接。用戶可以從瀏覽器的地址欄中看到跳轉(zhuǎn)后的地址。進(jìn)行重定向操作后,request中的屬性全部失效,并且重新創(chuàng)建一個新的request對象。2025/2/6《Web程序設(shè)計(jì)》29sendRedirect()方法的語法格式如下:2025/2/6《Web程序設(shè)計(jì)》30response.sendRedirect(Stringpath);參數(shù)說明:path:用于指定目標(biāo)路徑,可以是相對路徑,也可以是不同主機(jī)的其他URL地址。<%response.sendRedirect(“l(fā)ogin.jsp");//重定向到登錄頁面%>通過response對象可以設(shè)置HTTP響應(yīng)報頭。1)禁用緩存2)設(shè)置頁面自動刷新3)設(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="密碼不能為空或長度過短";url="login.jsp";}else{msg="登錄成功,即將跳轉(zhuǎn)至系統(tǒng)首頁!";url="index.jsp";}out.println(msg);//顯示提示信息,設(shè)置5秒后自動跳轉(zhuǎn)

response.setHeader("refresh","5;URL="+url);%></body>check.jsplogin.jspindex.jsp失敗成功2025/2/6《Web程序設(shè)計(jì)》331JSP對象2out對象3request對象4response對象5session對象6application對象7其他對象及綜合示例session簡介session表示客戶端與服務(wù)器的一次會話,是javax.servlet.http.HttpSession接口的實(shí)例化對象。Web中的session指定是用戶在瀏覽某個網(wǎng)站時,從進(jìn)入網(wǎng)站到瀏覽器關(guān)閉所經(jīng)過的這段時間,與用戶相關(guān)的所有信息都被保存在session中,因此,JSP中使用session對象存儲與用戶一次會話相關(guān)的所有信息。HTTP協(xié)議是一種無狀態(tài)的協(xié)議(即不保存連接狀態(tài)的協(xié)議),每次用戶請求在接收到服務(wù)器的響應(yīng)后,連接就關(guān)閉了。為了彌補(bǔ)這一缺點(diǎn),HTTP協(xié)議提供了session。2025/2/6《Web程序設(shè)計(jì)》34Session對象的常用方法方法描述publicObjectgetAttribute(Stringname)返回session對象中與指定名稱綁定的對象,如果不存在則返回nullpublicEnumerationgetAttributeNames()返回session對象中所有的對象名稱publicStringgetId()返回session對象的IDpublicvoidinvalidate()將session無效化,解綁任何與該session綁定的對象publicbooleanisNew()返回是否為一個新的客戶端,或者客戶端是否拒絕加入sessionpubliclonggetLastAccessedTime()返回客戶端最后訪問的時間,以毫秒為單位,從1970年1月1號凌晨開始算起publicvoidremoveAttribute(Stringname)移除session中指定名稱的對象publicvoidsetAttribute(Stringname,Objectvalue)使用指定的名稱和值來產(chǎn)生一個對象并綁定到session中publicvoidsetMaxInactiveInterval(intinterval)用來指定時間,以秒為單位,servlet容器將會在這段時間內(nèi)保持會話有效2025/2/6《Web程序設(shè)計(jì)》35session生命周期管理session的生命周期分為三個階段:創(chuàng)建、活動、銷毀。(1)創(chuàng)建當(dāng)客戶端第一次訪問某個JSP頁面時,服務(wù)器會為當(dāng)前會話創(chuàng)建一個sessionID,每次客戶端向服務(wù)端發(fā)送請求時,都會將此sessionID一并發(fā)送過去,服務(wù)端會進(jìn)行校驗(yàn)。(2)活動當(dāng)session創(chuàng)建后,客戶端再訪問其它頁面都屬于同一次會話。只要當(dāng)前會話頁面沒有全部關(guān)閉,重新打開的新的瀏覽器窗口訪問同一項(xiàng)目資源時,也屬于同一次會話。除非本次會話的所有頁面都關(guān)閉后再重新訪問系統(tǒng)某個頁,將會創(chuàng)建新的會話。(3)銷毀session的銷毀只有三種方式:明確調(diào)用session.invalidate()方法、session過期(超時)、服務(wù)器重新啟動。這三種方式會使當(dāng)前的會話清除。2025/2/6《Web程序設(shè)計(jì)》36Tomcat的默認(rèn)session超時時間為30分鐘,可以通過session.setMaxInactiveInterval(time)方法設(shè)置某個session的超時時間。還可以通過web.xml中配置參數(shù)“session-timeout”,這種方法是設(shè)置所有的session超時時間。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<%//獲取會話信息Stringusername=(String)session.getAttribute("username");DatelastAccessTime=newDate(session.getLastAccessedTime());DatecurTime=newDate();longminuteDiff=(curTime.getTime()-lastAccessTime.getTime())/(1000*60);//如果用戶名不為空,則會話還在,且與上次訪問時間相差不超過30分鐘,則正常

if(username!=null&&minuteDiff<30){

}else{//認(rèn)為會話已超期,跳轉(zhuǎn)到登錄頁面

session.removeAttribute(“username”);session.invalidate();response.sendRedirect("/login.jsp");}%>session.setAttribute(“username”,username);//將用戶名寫入到會話中注銷用戶的登錄狀態(tài),清空會話信息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對象2out對象3request對象4response對象5session對象6application對象7其他對象及綜合示例6.6application對象application對象用于保存所有應(yīng)用中的共有數(shù)據(jù)。它在服務(wù)器啟動時自動創(chuàng)建,在服務(wù)器停止時銷毀。當(dāng)application對象沒有被銷毀時,所有用戶都可以共享該application對象。與session對象相比,application對象的生命周期更長,類似于系統(tǒng)的“全局變量”。application對象是javax.servlet.ServletContext接口的實(shí)例化對象。向application中添加的數(shù)據(jù),該web應(yīng)用的所有JSP文件都能訪問,在任何地方對application對象中的數(shù)據(jù)操作,都將影響到其他用戶對此的訪問。2025/2/6《Web程序設(shè)計(jì)》41application對象常用方法方法描述publicvoidsetAttribute(Stringname,Objectvalue);使用指定名稱將對象綁定到此對話publicObjectgetAttribute(Stringname);返回與此會話中的指定名稱綁定在一起的對象,如果沒有對象綁定在該名稱下,則返回nullEnumerationgetAttributeName();返回所有可用屬性名的枚舉StringsetServerInfo();返回JSP(Servlet)引擎名及版本號StringgetRealPath(Stringpath);得到虛擬路徑對應(yīng)的絕對路徑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對象提供了對應(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ù)名稱獲取單個參數(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對象使用示例</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對象2out對象3request對象4response對象5session對象6application對象7其他對象及綜合示例其他JSP內(nèi)置對象pageContext對象pageContext對象是一個比較特殊的對象,用于獲取頁面上下文信息page對象page對象本質(zhì)上是包含當(dāng)前Servlet接口引用的變量,可以看作是this關(guān)鍵字。config對象config對象主要用于獲取服務(wù)器的配置信息,實(shí)現(xiàn)了javax.servlet.ServletConfig接口。exception對象exception對象用來處理JSP文件執(zhí)行時發(fā)生的所有錯誤和異常,只有在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等.壓縮文件請下載最新的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

提交評論