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

下載本文檔

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

文檔簡介

第5章JSP主講人:2025/2/61主要內(nèi)容2025/2/6《Web程序設(shè)計》21JSP基礎(chǔ)2指令標(biāo)簽3相對路徑與絕對路徑本章課程目標(biāo)知識目標(biāo)掌握J(rèn)SP基本語法、指令標(biāo)簽及路徑;熟練掌握Web應(yīng)用服務(wù)器的配置方法以及Web開發(fā)工具的使用方法。能力要求:能夠理解并掌握Web程序設(shè)計中的基礎(chǔ)知識與工作原理,將知識與原理應(yīng)用于開發(fā)過程中的問題分析;2025/2/6《Web程序設(shè)計》35.1JSP簡介JSP全稱JavaServerPages,是一種動態(tài)網(wǎng)頁開發(fā)技術(shù)。它使用JSP標(biāo)簽在HTML網(wǎng)頁中插入Java代碼。標(biāo)簽通常以<%開頭以%>結(jié)束。JSP是一種JavaServlet,主要用于實現(xiàn)Javaweb應(yīng)用程序的用戶界面部分。網(wǎng)頁開發(fā)人員通過結(jié)合HTML代碼、XHTML代碼、XML元素以及嵌入Java代碼塊來編寫JSP。JSP通過網(wǎng)頁表單獲取用戶輸入數(shù)據(jù)、訪問數(shù)據(jù)庫及其他數(shù)據(jù)源,然后動態(tài)地創(chuàng)建網(wǎng)頁。2025/2/6《Web程序設(shè)計》4JSP簡單示例2025/2/6《Web程序設(shè)計》5<%@pagelanguage="java"contentType="text/html;charset=UTF-8"%><html><head><title>簡單JSP示例</title></head><body><h3>輸出Fibonacci數(shù)列</h3><div><%inta=0,b=1,c;for(inti=0;i<20;i++){c=a+b;println(“<b>”+c+“</b”);}%></div></body></html>2025/2/6《Web程序設(shè)計》6JSP語法JSP中的腳本程序必須包含在<%和%>之間2025/2/6《Web程序設(shè)計》7<%代碼片段%>或<%

代碼片段%>今天是:<%out.println(newjava.util.Date().toLocaleString());%><%java.util.Datetoday=newjava.util.Date();out.println(“今天是:”+today.toLocaleString());%>JSP注釋JSP中可以為代碼添加注釋,主要分為三種情況,HTML注釋、Java代碼注釋、JSP腳本程序注釋2025/2/6《Web程序設(shè)計》8注釋方式語法格式說明HTML注釋<!--注釋文本-->HTML注釋,通過瀏覽器查看網(wǎng)頁源代碼時可以看見注釋內(nèi)容Java注釋//Java單行注釋/*Java多行注釋*/Java中的單行與多行注釋,注釋內(nèi)容不會被發(fā)送至瀏覽器,也不會被編譯JSP注釋<%--JSP注釋--%>JSP注釋,注釋內(nèi)容不會被發(fā)送至瀏覽器,也不會被編譯JSP注釋示例2025/2/6《Web程序設(shè)計》9<!--以下代碼顯示了當(dāng)前系統(tǒng)時間(HTML注釋)--><%--代碼釋義(JSP注釋):初始化日期對象使用Date獲取系統(tǒng)日期--%><%java.util.Datetoday=newjava.util.Date();out.println(“今天是:”+today.toLocaleString());//以當(dāng)前時區(qū)格式顯示日期%>JSP表達(dá)式JSP中允許表達(dá)式的單獨輸出,可以將任何合法的Java表達(dá)式的值直接輸出。表達(dá)式元素中可以包含任何符合Java語言規(guī)范的表達(dá)式,但是不能使用分號來結(jié)束表達(dá)式。這種方式主要的用途是輸出某個變量和表達(dá)式的值。2025/2/6《Web程序設(shè)計》10<%=表達(dá)式%><%out.println(表達(dá)式);%>2025/2/6《Web程序設(shè)計》11<body><div><%java.util.Datetoday=newjava.util.Date();%>今天是:<%=today.toLocaleString())%><!--以當(dāng)前時區(qū)格式顯示日期--></div></body>普通變量聲明在腳本程序中可直接聲明變量,這種方式聲明的變量能被后續(xù)的代碼直接使用。例如,以下代碼聲明了一個area變量,后面的代碼中計算并輸出了該變量的值。2025/2/6《Web程序設(shè)計》12<%floatarea;area=3.14*10*10;//計算圓的面積%>圓的面積為:<%=area%>類變量的聲明類變量的聲明通過“<%!%>”來實現(xiàn)例如,聲明了計數(shù)器變量counter,在后續(xù)的代碼中進(jìn)行累加并顯示。2025/2/6《Web程序設(shè)計》13<%!DataTypevar1,var2;%><%!intcounter=0;%>計數(shù)器的值為:<%counter++;out.println(counter);%>這種方法聲明的變量是類的成員變量,普通變量聲明的是函數(shù)內(nèi)的局部變量。左例中,當(dāng)頁面不斷刷新時,counter值會不斷累加。如果換成普通變量的聲明,則該counter值始終為1。方法的聲明JSP頁面中的方法聲明通過”<%!%>“來實現(xiàn)2025/2/6《Web程序設(shè)計》14<body><%!floatcalcArea(floatradius){return3.14*radius*radius;}%><div>半徑為10的圓面積為:<%out.println(calcArea(10));%></body>需要注意的是,JSP中聲明的方法只能在同一頁面中使用,不允許跨頁面使用。主要內(nèi)容2025/2/6《Web程序設(shè)計》151JSP基礎(chǔ)2指令標(biāo)簽3相對路徑與絕對路徑JSP指令標(biāo)簽JSP指令用來設(shè)置整個JSP頁面相關(guān)的屬性,如網(wǎng)頁的編碼方式和腳本語言。JSP指令通過專門的指令標(biāo)簽定義,主要包含以下三種:page指令include指令taglib指令。2025/2/6《Web程序設(shè)計》16page指令JSP中的page指令用于向JSP容器提供與當(dāng)前JSP頁面相關(guān)的指令。2025/2/6《Web程序設(shè)計》17<%@pageattribute=”value”attribute2=”value2”...%>屬性名描述buffer指定out對象使用緩沖區(qū)的大小autoFlush控制out對象的緩存區(qū)contentType指定當(dāng)前JSP頁面的MIME類型和字符編碼errorPage指定當(dāng)JSP頁面發(fā)生異常時需要轉(zhuǎn)向的錯誤處理頁面isErrorPage指定當(dāng)前頁面是否可以作為另一個JSP頁面的錯誤處理頁面extends指定servlet從哪一個類繼承import導(dǎo)入要使用的Java類info定義JSP頁面的描述信息isThreadSafe指定對JSP頁面的訪問是否為線程安全language定義JSP頁面所用的腳本語言,默認(rèn)是Javasession指定JSP頁面是否使用sessionisELIgnored指定是否執(zhí)行EL表達(dá)式isScriptingEnabled確定腳本元素能否被使用contentType和pageEncoding屬性contentType屬性設(shè)置Content-Type響應(yīng)報頭,標(biāo)明即將發(fā)送到客戶程序的文檔的MIME類型。pageEncoding屬性設(shè)置頁面的編碼字符集。通常contentType中包含了字符集的聲明,如果只設(shè)置字符集,則可以通過pageEncoding聲明。MIME-Type:text/html;charset=GBKCharacter-Set:GBK2025/2/6《Web程序設(shè)計》18<%@pagecontentType="MIME-Type;charset=Character-Set"pageEncoding=”Character-Set”%>import屬性使用page指令的import屬性可以指定JSP頁面需要引入的外部包。通常JSP中Java程序除了默認(rèn)引入了java.lang.*、javax.servlet.*、javax.servlet.jsp.*、javax.servlet.http.*包外,其它需要使用的包或類都需要通過import指令引入。2025/2/6《Web程序設(shè)計》19<%@pageimport="package1.class1,package2.class2,package3.*,"%><%@pageimport=“java.util.Date,nchu.ss.util.*”%>errorPage與isErrorPage屬性errorPage屬性用來指定一個JSP頁面,由該頁面來處理當(dāng)前頁面中拋出但未被捕獲的任何異常(即類型為Throwable的對象)。例如,頁面中要指定/error.jsp為異常處理頁面,可以聲明如下:2025/2/6《Web程序設(shè)計》20<%@pageerrorPage="/error.jsp"%>include指令JSPinclude指令用于通知JSP引擎在翻譯當(dāng)前JSP頁面時,將其他文件中的內(nèi)容合并進(jìn)當(dāng)前JSP頁面轉(zhuǎn)換成的Servlet源文件中,這種在源文件級別進(jìn)行引入的方式,稱為靜態(tài)引入。當(dāng)前JSP頁面與靜態(tài)引入的文件緊密結(jié)合為一個完整的文件。這些文件可以是JSP頁面、HTML頁面、文本文件或是一段Java代碼。2025/2/6《Web程序設(shè)計》21<%@includefile="relativeURL|absoluteURL"%>例如,有一段js文件引入的JSP文件—all_js.jsp2025/2/6《Web程序設(shè)計》22<scripttype=”text/javascript”src=”js/jquery-min.js”></script><scripttype=”text/javascript”src=”js/util.js”></script><scripttype=”text/javascript”src=”js/index.js”></script><%@pagecontentType="text/html;charset=utf-8"%><html><head><jsp:includefile=”all_js.jsp”/></head><body><!--正常業(yè)務(wù)內(nèi)容--></body></html>需要注意的是:include指令是以靜態(tài)方式包含文件,被包含文件將原封不動地插入JSP文件中。因此,在所包含的文件中不能使用<html></html>、<body></body>標(biāo)記,否則會因為與原有的JSP文件有相同標(biāo)記而產(chǎn)生錯誤。另外,因為原文件和被包含文件可以相互訪問彼此定義的變量和方法,所以要避免變量和方法在命名上產(chǎn)生沖突。2025/2/6《Web程序設(shè)計》23taglib指令JSPAPI允許自定義JSP標(biāo)簽,如:HTML或XML標(biāo)簽,標(biāo)簽庫是一組實現(xiàn)自定義行為的用戶定義標(biāo)簽。在自定義標(biāo)簽庫中,可以把復(fù)雜的業(yè)務(wù)邏輯功能都封裝在標(biāo)簽庫中,而不必在jsp中寫具體的代碼。這樣,jsp代碼與java編碼能力不必強制耦合在一起,可以提高代碼的封裝性和可維護性。2025/2/6《Web程序設(shè)計》24taglib指令的使用語法如下:2025/2/6《Web程序設(shè)計》25<%@tagliburi="uri"prefix="prefixOfTag">參數(shù)說明:uri:自定義標(biāo)簽的完整URI,是由第三方標(biāo)簽庫定義的,如果是開發(fā)者定義的,則由開發(fā)者給出URI,一般是唯一的;prefixOfTag:自定義標(biāo)簽的前綴,可以根據(jù)需要或業(yè)務(wù)特點命名,一般不宜過長。例如,在頁面中使用JSTL標(biāo)簽庫中的out標(biāo)簽示例代碼如下2025/2/6《Web程序設(shè)計》26<%@pagecontentType=”text/html;charset=utf-8”%><%@taglibprefix="c"uri="/jsp/jstl/core"%><html><head><metacharset=”utf-8”><title>使用JSTL標(biāo)簽庫示例</title></head><body><%java.util.DatecurDate=newjava.util.Date();%>當(dāng)前系統(tǒng)時間:<c:outvalue=”{curDate}”></c:out></body>主要內(nèi)容2025/2/6《Web程序設(shè)計》271JSP基礎(chǔ)2指令標(biāo)簽3相對路徑與絕對路徑簡介Web開發(fā)過程中,各種資源的定位和訪問,都必須指明其相應(yīng)的路徑,才能準(zhǔn)確地訪問該資料。路徑通常可分為兩類:相對路徑與絕對路徑。相對路徑,就是相對于當(dāng)前文件的路徑,當(dāng)前文件所在的路徑也通常稱為基準(zhǔn)路徑,相對路徑給出的是相對于這個基準(zhǔn)路徑的位置,與當(dāng)前的位置密切相關(guān)。絕對路徑,就是資源在網(wǎng)站或存儲中的絕對路徑,也即是訪問資源時的確切位置,一般是指資源的完整路徑或相對于網(wǎng)站根目錄的路徑,與當(dāng)前的位置無關(guān)。2025/2/6《Web程序設(shè)計》28在使用路徑時,通常會用到以下三種特殊路徑符號。2025/2/6《Web程序設(shè)計》29符號含義示例./當(dāng)前目錄./home.jpg,訪問當(dāng)前目錄下的home.jpg文件../上一級目錄../index.jsp,訪問上一級目錄下的index.jsp文件/網(wǎng)站根目錄/error.jsp,訪問網(wǎng)站根目錄下的error.jsp文件示例當(dāng)前正在訪問pro_list.jsp,如果需要在pro_list.jsp中引用js目錄下的common.js文件,可以使用兩種方式來訪問:(1)相對路徑,基準(zhǔn)路徑為pages目錄(2)絕對路徑,可以直接使用“/”從網(wǎng)站的根目錄開始訪問2025/2/6《Web程序設(shè)計》30<scripttype=”text/javascript”src=”../js/common.js”></script><scripttype=”text/javascript”src=”/myweb/js/common.js”></script>兩種路徑方式的優(yōu)缺點如下:相對路徑的優(yōu)點是,不依賴于某個具體的位置,網(wǎng)頁代碼易維護、可重用性好;缺點是必須嚴(yán)格保證當(dāng)前資源路徑正確性,否則容易導(dǎo)致資源訪問出錯。絕對路徑的優(yōu)點是,使用簡單,不依賴于當(dāng)前資源路徑,網(wǎng)頁代碼可閱讀性好;缺點是可重用性與可維護性不好,網(wǎng)頁路徑發(fā)生變化時需同步更新。2025/2/6《Web程序設(shè)計》31靜態(tài)資源路徑問題靜態(tài)資源路徑主要是指訪問Web項目中的靜態(tài)資源資源,例如圖片、Javascript、CSS、鏈接等資源時,對路徑的解析方式。靜態(tài)資源訪問時,通常相對路徑都是基于當(dāng)前路徑,而絕對路徑則是相對于整個服務(wù)器的基礎(chǔ)地址。2025/2/6《Web程序設(shè)計》32代碼訪問方式實際訪問資源<ahref="http://localhost:8080/app2/index.html">鏈接1</a>絕對路徑點擊鏈接1將訪問app2/index.html<ahref="/app3/pages/index.html">鏈接2</a>絕對路徑點擊鏈接2將訪問app3/pages/index.html<ahref="index.html">鏈接3</a>相對路徑點擊鏈接3將訪問app1/pages/index.html<formaction="http://localhost:8080/app2/index.html"><inputtype="submit"value="按鈕1"/></form>絕對路徑點擊按鈕1將訪問app2/index.html<formaction="../../app2/index.html"><inputtype="submit"value="按鈕2"/></form>相對路徑點擊按鈕2將訪問app2/index.html2025/2/6《Web程序設(shè)計》33動態(tài)網(wǎng)頁資源路徑動態(tài)資源路徑主要指服務(wù)器中的資源路徑,通常在JavaWeb開發(fā)中,服務(wù)器端的資源路徑通常是Servlet中的資源路徑。服務(wù)器端的資源路徑可以是相對路徑和絕對路徑:相對路徑:./與../均可使用,同樣表示以當(dāng)前位置為基準(zhǔn)路徑,訪問當(dāng)前目錄下或上一級目錄中的資源。絕對路徑:與靜態(tài)資源不同,動態(tài)資源不能使用主機名、IP、端口等絕對資源位置,只能使用“/”開始的路徑,表示從當(dāng)前應(yīng)用的根目錄開始。2025/2/6《Web程序設(shè)計》34例如,Servlet中轉(zhuǎn)發(fā)請求時,2025/2/6《Web程序設(shè)計》35/*當(dāng)前服務(wù)器端位置:http://localhost:8080/app/servlet/AServlet,其中app為應(yīng)用名稱*/publiclassAServletextendsHttpServlet{publicvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{if(isValid==true)request.getRequestDispatcher("/BServlet").forward(req,resp);//位置1elserequest.getRequestDispatcher(“../BServlet").forward(req,resp);//位置2}}其中,位置1使用了絕對路徑,其訪問資源的完整路徑為:http://localhost:8080/app/BServlet;位置2使用了相對路徑,其訪問資源的完整路徑為:http://localhost:8080/app/servlet/BServlet。2025/2/6《Web程序設(shè)計》36本章結(jié)束第6章JSP內(nèi)置對象主講人:2025/2/6372025/2/6《Web程序設(shè)計》381JSP對象2out對象3request對象4response對象5session對象6application對象7其他對象及綜合示例本章課程目標(biāo)知識目標(biāo)掌握J(rèn)SP內(nèi)置對象基本屬性及方法、使用方法;能力要求:能夠理解并掌握Web程序設(shè)計中的基礎(chǔ)知識與工作原理,將知識與原理應(yīng)用于開發(fā)過程中的問題分析;具備復(fù)雜問題的分析與綜合能力,能夠綜合運用所學(xué)知識,分析關(guān)鍵需求,設(shè)計適用于復(fù)雜問題的解決方案;2025/2/6《Web程序設(shè)計》396.1JSP內(nèi)置對象JSP內(nèi)置對象是Web容器創(chuàng)建的一組對象,開發(fā)人員在進(jìn)行JSP頁面編程時,不需要使用new關(guān)鍵字進(jìn)行實例化,就可以使用的一組內(nèi)置對象。由于這些對象是由容器在初始化時隱式創(chuàng)建的,因此,這些內(nèi)置對象也稱為JSP隱式對象。JSP中的內(nèi)置對象有:out、request、response、session、application、config、pageContext、page、exception2025/2/6《Web程序設(shè)計》40特點這些內(nèi)置對象具有以下特點:

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

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

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

只有在腳本元素的表達(dá)式或代碼段中才可使用(<%=使用內(nèi)置對象%>或<%使用內(nèi)置對象%>)。2025/2/6《Web程序設(shè)計》41示例2025/2/6《Web程序設(shè)計》42//設(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("登錄失敗!");}工作機制JSP頁面在被客戶端請求時,容器首先判斷該JSP頁面是否為第一次訪問,如果是第一次,則初始化該JSP頁面:即生成JSP頁面的java文件,編譯為class,然后執(zhí)行這個class文件,產(chǎn)生響應(yīng)后的HTML代碼,返回給客戶端。2025/2/6《Web程序設(shè)計》43publicfinalclassindex_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è)計》441JSP對象2out對象3request對象4response對象5session對象6application對象7其他對象及綜合示例out簡介out是javax.servlet.jsp.JspWriter類的實例化對象,主要功能就是完成頁面的輸出操作,將計算結(jié)果和從數(shù)據(jù)庫中獲取的數(shù)值輸出到網(wǎng)頁上,使用println()或print()方法輸出,形成最終返回給客戶端的HTML代碼。2025/2/6《Web程序設(shè)計》45方法作用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è)計》46<div><%out.println(“helloworld”);%><!--采用out.println()輸出--></div><!--等同于下面這種方式--><div><%=“helloworld”%><!--采用<%=%>輸出--></div>楊輝三角形示例輸出的主要思路如下:指定n行,循環(huán)n次,每次輸出其中的一行;采用一個二維數(shù)組存儲楊輝三角形的值;在處理每一行時,先輸出每一行前面的空格(由于HTML會將連續(xù)的“”看成一個,所以此處使用

字符);計算每行中的楊輝三角數(shù)值,然后輸出該數(shù)值;輸出換行符(由于HTML不會輸出”\n”,因此采用<br>進(jìn)行換行)。完整的示例代碼如下所示:2025/2/6《Web程序設(shè)計》472025/2/6《Web程序設(shè)計》48<%!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("    ");//計算輸出數(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è)計》491JSP對象2out對象3request對象4response對象5session對象6application對象7其他對象及綜合示例6.3request對象request對象是javax.servlet.http.HttpServletRequest類的實例。每當(dāng)客戶端請求一個JSP頁面時,JSP引擎就會制造一個新的request對象來代表這個請求。請求中一般包含了請求所需的參數(shù)值或者信息。因此,可以通過request來獲取客戶端和服務(wù)端的信息,如傳遞參數(shù)名和參數(shù)值、IP地址、應(yīng)用系統(tǒng)名,服務(wù)器主機名等。2025/2/6《Web程序設(shè)計》50request對象常用方法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è)計》51request對象的主要作用體現(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è)計》52requestheaders2025/2/6《Web程序設(shè)計》53request請求處理當(dāng)客戶端通過超鏈接的形式發(fā)送請求時,可以為該請求傳遞參數(shù),通過在超鏈接的后面加上問號“?”來實現(xiàn)。如果要同時指定多個參數(shù),各參數(shù)間使用與符號“&”分隔即可。2025/2/6《Web程序設(shè)計》54<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è)計》55中文參數(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è)計》56request.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的形式保存到客戶機的某個指定目錄中。2025/2/6《Web程序設(shè)計》57//寫入cookie對象Stringusername=request.getParameter(“username”);Cookiecookie=newCookie("username",username);//創(chuàng)建并實例化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è)計》58注冊頁面(ex_req.jsp)提交查看頁面(ex_req_save.jsp)2025/2/6《Web程序設(shè)計》59<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"/>計算機視覺<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è)計》601JSP對象2out對象3request對象4response對象5session對象6application對象7其他對象及綜合示例6.4response對象response對象用于響應(yīng)客戶請求,向客戶端輸出信息。response對象屬于javax.servlet.http.HttpServletResponse接口的實例。它封裝了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è)計》61HTTP協(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指明文檔最后修改時間??蛻舳丝梢跃彺嫖臋n并且在后續(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è)計》62響應(yīng)示例2025/2/6《Web程序設(shè)計》63response對象的主要方法方法描述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è)計》64重定向網(wǎng)頁使用response對象提供的sendRedirect()方法可以將網(wǎng)頁重定向到另一個頁面。在客戶端瀏覽器上將會得到跳轉(zhuǎn)的地址,并重新發(fā)送請求鏈接。用戶可以從瀏覽器的地址欄中看到跳轉(zhuǎn)后的地址。進(jìn)行重定向操作后,request中的屬性全部失效,并且重新創(chuàng)建一個新的request對象。2025/2/6《Web程序設(shè)計》65sendRedirect()方法的語法格式如下:2025/2/6《Web程序設(shè)計》66response.sendRedirect(Stringpath);參數(shù)說明:path:用于指定目標(biāo)路徑,可以是相對路徑,也可以是不同主機的其他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è)計》67<%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è)計》68<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è)計》691JSP對象2out對象3request對象4response對象5session對象6application對象7其他對象及綜合示例session簡介session表示客戶端與服務(wù)器的一次會話,是javax.servlet.http.HttpSession接口的實例化對象。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)閉了。為了彌補這一缺點,HTTP協(xié)議提供了session。2025/2/6《Web程序設(shè)計》70Session對象的常用方法方法描述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è)計》71session生命周期管理session的生命周期分為三個階段:創(chuàng)建、活動、銷毀。(1)創(chuàng)建當(dāng)客戶端第一次訪問某個JSP頁面時,服務(wù)器會為當(dāng)前會話創(chuàng)建一個sessionID,每次客戶端向服務(wù)端發(fā)送請求時,都會將此sessionID一并發(fā)送過去,服務(wù)端會進(jìn)行校驗。(2)活動當(dāng)session創(chuàng)建后,客戶端再訪問其它頁面都屬于同一次會話。只要當(dāng)前會話頁面沒有全部關(guān)閉,重新打開的新的瀏覽器窗口訪問同一項目資源時,也屬于同一次會話。除非本次會話的所有頁面都關(guān)閉后再重新訪問系統(tǒng)某個頁,將會創(chuàng)建新的會話。(3)銷毀session的銷毀只有三種方式:明確調(diào)用session.invalidate()方法、session過期(超時)、服務(wù)器重新啟動。這三種方式會使當(dāng)前的會話清除。2025/2/6《Web程序設(shè)計》72Tomcat的默認(rèn)session超時時間為30分鐘,可以通過session.setMaxInactiveInterval(time)方法設(shè)置某個session的超時時間。還可以通過web.xml中配置參數(shù)“session-timeout”,這種方法是設(shè)置所有的session超時時間。2025/2/6《Web程序設(shè)計》73<!--web.xml--><session-config>//單位是分鐘

<session-timeout>10</session-timeout></session-config>session使用示例2025/2/6《Web程序設(shè)計》74<%//獲取會話信息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è)計》75<!--注銷頁面--><%//清空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è)計》761JSP對象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接口的實例化對象。向application中添加的數(shù)據(jù),該web應(yīng)用的所有JSP文件都能訪問,在任何地方對application對象中的數(shù)據(jù)操作,都將影響到其他用戶對此的訪問。2025/2/6《Web程序設(shè)計》77application對象常用方法方法描述publicvoidsetAttribute(Stringname,Objectvalue);使用指定名稱將對象綁定到此對話publicObjectgetAttribute(Stringname);返回與此會話中的指定名稱綁定在一起的對象,如果沒有對象綁定在該名稱下,則返回nullEnumerationgetAttributeName();返回所有可用屬性名的枚舉StringsetServerInfo();返回JSP(Servlet)引擎名及版本號StringgetRealPath(Stringpath);得到虛擬路徑對應(yīng)的絕對路徑publicStringgetContextPath();取得當(dāng)前的虛擬路徑名稱2025/2/6《Web程序設(shè)計》78應(yīng)用內(nèi)共享數(shù)據(jù)通過setAttribute()方法向application中添加數(shù)據(jù),通過getAttribute方法從application中獲取已添加的數(shù)據(jù)。2025/2/6《Web程序設(shè)計》79<%

//添加數(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ī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è)計》80<!--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è)計》81<%@pagelanguage="java"contentType="text/html;charset=UTF-8"%><html><head><title>application對象使用示例</title></head><body><%Integercounter=(Integer)application.getAttribute("c

溫馨提示

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

評論

0/150

提交評論