




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
3JSP技術(shù)學(xué)習(xí)目標(biāo)熟練掌握J(rèn)SP指令、動作及腳本元素。熟練掌握J(rèn)SP常用內(nèi)部對象request、response、session、application、out及exception。了解JSP的內(nèi)部對象config和pagecontext。了解Cookie的概念,會使用Cookie對象。會使用JSP技術(shù)解決實(shí)際問題。3.1JSP簡介JSP(JavaServerPages)是由Sun公司主導(dǎo)創(chuàng)建的一種動態(tài)網(wǎng)頁技術(shù)標(biāo)準(zhǔn)。是Java語言的Web開發(fā)技術(shù)。JSP部署于網(wǎng)絡(luò)服務(wù)器上,可以響應(yīng)客戶端發(fā)送的請求,并根據(jù)請求內(nèi)容動態(tài)地生成HTML、XML或其他格式文檔的Web網(wǎng)頁,然后返回給請求者。JSP技術(shù)以Java語言作為腳本語言,為用戶的HTTP請求提供服務(wù),并能與服務(wù)器上的其它Java程序共同處理復(fù)雜的業(yè)務(wù)需求,主要用于開發(fā)企業(yè)級Web應(yīng)用,屬于JavaEE技術(shù)范圍。3.1JSP簡介JSP技術(shù)是對Servlet的擴(kuò)展,在HTML代碼中嵌入Java代碼片段(Scriptlet)和JSP標(biāo)簽,構(gòu)成JSP網(wǎng)頁。最終JSP文件會通過Web服務(wù)器的Web容器編譯成一個Servlet處理各種請求。JSP技術(shù)所開發(fā)的Web應(yīng)用程序是基于Java的,因此,它擁有Java語言跨平臺的特性、業(yè)務(wù)代碼分離、組件重用、繼承Servlet功能和預(yù)編譯等特征。3.1JSP簡介Web容器處理JSP文件請求的執(zhí)行過程主要包括以下4個步驟:(1)客戶端發(fā)出Request請求;(2)JSP容器將JSP轉(zhuǎn)譯成Servlet的源代碼;(3)將產(chǎn)生的Servlet源代碼經(jīng)過編譯后,并加載到內(nèi)存執(zhí)行;(4)把結(jié)果Response(響應(yīng))至客戶端。3.2JSP基本語法JSP文件擴(kuò)展名為.jsp,JSP文件的內(nèi)容包括HTML標(biāo)記、JSP標(biāo)記、Java代碼或JavaScript腳本等。JSP標(biāo)記的語法一般有開始標(biāo)記、結(jié)束標(biāo)記、屬性和內(nèi)容體,屬性的值要使用單引號或者雙引號括起來,如果屬性的值中有雙引號還需要使用“\”進(jìn)行轉(zhuǎn)義。一般情況下,JSP文件的動態(tài)部分都包含在“<%……%>”中。3.2.1JSP注釋JSP注釋可分為兩種:一種是HTML注釋<!---->,它能夠在客戶端瀏覽器顯示;另一種是JSP特有的注釋<%----%>,也稱為隱藏注釋,客戶端看不到,是開發(fā)人員專用的。3.2.1JSP注釋1.HTML注釋【語法】<!--注釋-->【功能】發(fā)送到客戶端HTML文本中,可以通過查看源代碼看到;并且所有嵌入其中的JSP腳本將被編譯執(zhí)行。例題3-1,HTML注釋測試htmlcomment.jsp(比較JSP文件中的注釋部分與客戶端的HTML頁面的源碼)<!--Thisip<%=request.getRemoteAddr()%>-->3.2.1JSP注釋2.隱藏注釋【語法】<%--注釋--%>【功能】隱藏注釋是JSP的標(biāo)準(zhǔn)注釋,寫在JSP程序中,包含在其中的所有內(nèi)容將被JSP編譯器忽略,返回的HTML源代碼中也看不到。例題3-2,隱藏注釋測試hidecomment.jsp源文件如下:<%--此注釋不會在源代碼中顯示<%=request.getRemoteAddr()%>--%>3.2.1JSP注釋注意:與HTML注釋的區(qū)別在于JSP容器不會對<%--和--%>之間的語句進(jìn)行編譯,它不會顯示在客戶端的瀏覽器上,也無法從源文件中看到。JSP頁面中除了以上兩種注釋之外,Java傳統(tǒng)的注釋方式:“//”對單行代碼注釋和“/**/”對多行代碼注釋,仍然可以使用。但是,Java傳統(tǒng)的注釋方式只能出現(xiàn)在Java代碼區(qū)中。3.2.2JSP腳本元素JSP腳本元素包括聲明、表達(dá)式和腳本三部分,下面分別進(jìn)行學(xué)習(xí)。1.JSP聲明【語法】<%!Java聲明%>【功能】聲明在JSP頁面使用的變量和方法。在聲明中定義的變量和方法將在JSP頁面被載入時初始化,JSP聲明中的變量是全局變量。例如:<%!inta=0;%>
聲明變量a,并賦初值0<%!intx,y,z;%>
聲明變量x,y,z<%!publicintf(inta,intb){if(a>b)returna;elsereturnb;}%>聲明方法f3.2.2JSP腳本元素注意:(1)在JSP聲明語句中聲明的變量和方法在編譯為Servlet的時候?qū)⒆鳛轭惖膶傩院头椒ǘ嬖?。類的屬性可以被類的所有方法訪問,而方法的變量只能被方法本身訪問。(2)聲明必須以分號“;”結(jié)尾。(3)可以一次聲明多個變量;(4)聲明標(biāo)記以“<%!”開始,以“%>”結(jié)束;(5)聲明區(qū)中只能包含屬性和方法的聲明,不可以直接嵌入Java代碼片段和使用JSP內(nèi)置對象3.2.2JSP腳本元素2.JSP表達(dá)式【語法】<%=expression%>【功能】通過這個標(biāo)記直接輸出一個表達(dá)式的值,如果表達(dá)式的值不是String類型,會調(diào)用表達(dá)式的返回對象的toString()方法。例題3-3,JSP表達(dá)式舉例expression.jsp源代碼如下:
<p>5的平方是:<%=Math.pow(5,2)%><p>3*5+8=<%=3*5+8%>3.2.2JSP腳本元素注意:(1)JSP表達(dá)式在運(yùn)行后自動轉(zhuǎn)換為字符串,因此可以在文本中直接插入表達(dá)式;(2)JSP表達(dá)式只能單獨(dú)出現(xiàn),不能在一組<%%>之間出現(xiàn)多條語句;(3)JSP表達(dá)式和普通的Java語句不同,不能以分號“;”結(jié)尾;(4)“<%=”是表達(dá)式的開始標(biāo)記,“<%”與“=”之間不能有空格。3.2.2JSP腳本元素3.腳本(Scriptlet)【語法】<%javacode%>【功能】所謂腳本,就是插入到JSP頁面的Java代碼段。腳本中可以包括任意多行的Java代碼。在<%%>中可以定義變量、方法和輸出表達(dá)式的數(shù)值,還可以使用JSP的內(nèi)置對象。在JSP頁面轉(zhuǎn)化成Servlet的時候,<%%>中的內(nèi)容出現(xiàn)在_jspService()方法中。3.2.2JSP腳本元素注意:(1)在腳本中可以聲明將要用到的變量或方法,與JSP聲明一樣;(2)編寫符合腳本語言規(guī)范的表達(dá)式,如同JSP表達(dá)式一樣;(3)能夠使用JSP內(nèi)部對象和<jsp:useBean>聲明過的對象,編寫JSP程序;(4)腳本之間不能嵌套。如:<%<%%>%>是錯誤的。3.2.2JSP腳本元素例題3-4,利用while語句循環(huán)輸出5個數(shù)據(jù)。scriptlet.jsp源碼如下:<body><%inti=0;while(i<5){%><!--JSP腳本中不能包含JSP的聲明或表達(dá)式-->i=<%=i%><%i++;}%><body>3.2.3JSP指令JSP指令不會產(chǎn)生任何內(nèi)容輸出到網(wǎng)頁中,主要用來定義整個JSP網(wǎng)頁相關(guān)的信息,例如,在JSP文件中設(shè)定引入的包、定義錯誤處理頁面,網(wǎng)頁的編碼方式、是否使用session等信息。JSP指令標(biāo)記以“<%@”符號開始,共有6個:page、include、taglib、tag、attribute和variable,但常用的只有前三個。JSP指令的語法格式為:<%@指令名稱屬性=“值”屬性n=“值n”……%>3.2.3JSP指令1.page指令【語法】<%@page屬性1="值1"屬性2="值2"……%>【功能】用于定義整個JSP頁面的相關(guān)屬性,比如指定所使用的編程語言、所擴(kuò)展的類及導(dǎo)入的軟件包等,這些屬性在JSP被服務(wù)器解析成Servlet時會轉(zhuǎn)換為Java程序代碼。3.2.3JSP指令注意:(1)JSP中默認(rèn)的導(dǎo)入列表有:Java.lang.*,Javax.servlet.*,Javax.servlet.jsp.*,Java.servlet.http.*。這四個包已經(jīng)被隱含引入,包中的類、接口等可以直接使用。(2)在一個JSP頁面中,page指令可以出現(xiàn)多次,但是每一種屬性卻只能出現(xiàn)一次(import屬性除外),重復(fù)的屬性設(shè)置將覆蓋掉先前的設(shè)置。(3)在page指令中定義的屬性適用于該JSP頁面以及所有通過include指令或者<jsp:include>動作包含的靜態(tài)文件,但是不能用于動態(tài)文件。3.2.3JSP指令例題3-5,演示info屬性的用法,page_info.jsp源代碼如下:<%@pageinfo="學(xué)習(xí)page指令的實(shí)例"%><%@pagecontentType="Text/html"pageEncoding="UTF-8"%><html><head><title>使用page指令的info屬性</title></head><body><%=getServletInfo()%></body></html>3.2.3JSP指令例題3-6,演示import屬性的用法,page_import.jsp源代碼如下:<%@pageimport="java.util.*"%><%@pagecontentType="Text/html"pageEncoding="UTF-8"%><html><head><title>現(xiàn)在是什么時間?</title></head><body>
現(xiàn)在是:<%=newDate()%></body></html>3.2.3JSP指令例題3-7,演示errorPage和isErrorPage屬性的用法。page_isErrorPage.jsp源代碼如下:<%@pageisErrorPage="true"%><%@pagecontentType="Text/html"pageEncoding="UTF-8"%><html><head><title>錯誤提示頁面</title></head><body><%=exception.getMessage()%></body></html>3.2.3JSP指令page_error.jsp源代碼如下:<%@pageerrorPage="page_isErrorPage.jsp"%><html><head><title>有錯誤的頁面</title></head><body><%inta=5,b=0;intc=a/b;%></body></html>3.2.3JSP指令2.include指令【語法】<%@includefile=“URL相對路徑”%>【功能】include指令設(shè)置包含其他的文件或者代碼片段到當(dāng)前的JSP頁面中,包含的過程發(fā)生在JSP頁面轉(zhuǎn)化成Servlet的時候,這個過程是靜態(tài)的。所謂靜態(tài)是指被包含的內(nèi)容是增加到JSP頁面中的。被包含的文件可以是其他JSP頁面、HTML頁面、XML文件或者文本文件。3.2.3JSP指令例題3-8,使用include指令包含另一個JSP文件。include.jsp源代碼如下:<%@pagecontentType="Text/html"pageEncoding="UTF-8"%><html><body><fontcolor="blue">您的IP是:<%@includefile="ip.jsp"%></font></body></html>ip.jsp源代碼如下:<%=request.getRemoteAddr()%>3.2.3JSP指令注意:(1)使用include指令,可以把一個復(fù)雜的頁面分成若干簡單的部分,這樣大大增加了JSP頁面的可管理性,減少了開發(fā)工作量。當(dāng)要對頁面進(jìn)行更改時,只需要更改對應(yīng)的部分就可以了。(2)Include指令是在JSP頁面被編譯時導(dǎo)入文件的,所以當(dāng)被包含文件變化的時候,需要重新編譯包含的JSP頁面。因此,如果需要經(jīng)常改變被包含文件,那么使用include指令就不方便了,可以使用<jsp:include>來完成這個工作。(3)路徑問題,如果路徑以符號“/”開頭,則相對于這個Web應(yīng)用的根目錄;如果路徑以文件名或目錄名開頭,則該路徑是正在使用的JSP文件的當(dāng)前路徑。3.2.4JSP動作標(biāo)記JSP動作是特殊的標(biāo)記,通過一個動作可以實(shí)現(xiàn)多行Java代碼實(shí)現(xiàn)的效果。JSP動作標(biāo)記一共有14個,但主要使用的動作標(biāo)記只有5個,分別為:include、forward、useBean、getProperty和setProperty。下面主要學(xué)習(xí)include和forward動作,后面三個動作標(biāo)記都與JavaBean有關(guān),將在第四章介紹。3.2.4JSP動作標(biāo)記1.<jsp:include>動作【語法】<jsp:includepage="{relativeURL}"flush="true|false"/>或<jsp:includepage="{relativeURL}"flush="true|false"></jsp:include>【功能】把指定的靜態(tài)文件或者動態(tài)文件包含到當(dāng)前JSP頁面中,是動態(tài)包含方式。如果包含進(jìn)來的為靜態(tài)文件(如HTML文件),內(nèi)容直接包含到include動作所在的位置;如果包含進(jìn)來的為動態(tài)文件(如其他的JSP文件),則把被包含JSP網(wǎng)頁的輸出內(nèi)容插入到包含文件中。使用include動作還可以傳遞參數(shù)。3.2.4JSP動作標(biāo)記【屬性說明】page屬性的值是被包含文件的相對路徑。flush=”true|false”表示如果頁面的輸出內(nèi)容是有緩沖的,flush屬性的值決定是否flush,默認(rèn)值為false。例題3-9,include動作測試。jspinclude.jsp源代碼如下:<body><fontcolor="blue">IP地址是:<jsp:includepage="ip.jsp"/><br>靜態(tài)的IP是:<jsp:includepage="ip.html"/></font></body>3.2.4JSP動作標(biāo)記2.<jsp:forward>動作【語法】<jsp:forwardpage="{relativeURL}"/>或<jsp:forwardpage="{relativeURL}"></jsp:forward>【功能】可以由當(dāng)前的JSP頁面轉(zhuǎn)向到同一個Web應(yīng)用中的其他HTML或者JSP頁面,不能轉(zhuǎn)向到其他Web服務(wù)器的頁面上?!緦傩哉f明】page屬性的值表示轉(zhuǎn)向后的頁面地址,只能使用相對地址,“/”指頁面所屬的Web應(yīng)用的根目錄。3.2.4JSP動作標(biāo)記例題3-10,forward動作測試。<jsp:forwardpage="newworld.jsp"/>提示:使用<jsp:forward>動作轉(zhuǎn)向,和下面Servlet中常用的轉(zhuǎn)向代碼是完全等同的。RequestDispatcherrd=request.getRequestDispatcher("/register.jsp");rd.forward(request,response);3.2.5JSP基本語法實(shí)例下面,我們通過一個綜合實(shí)例,體會JSP基本語法的運(yùn)用。在本小節(jié)需要新建一個web項(xiàng)目chapter03,然后直接在WebRoot下新建三個JSP文件:jspSyntax.jsp,header.jsp和footer.jsp.文件。3.3JSP內(nèi)置對象為了方便和簡化JSP頁面開發(fā),在JSP技術(shù)中提供了9個隱含的內(nèi)置對象,開發(fā)人員不需要預(yù)先聲明和創(chuàng)建實(shí)例就可以在腳本代碼和表達(dá)式中使用。因此,內(nèi)置對象的含義就是指這些對象已經(jīng)由JSP自動生成好了。3.3JSP內(nèi)置對象對象名稱包名類名含義requestjavax.servlet.httpHttpServletRequest請求對象。responseHttpServletResponse返回給客戶的響應(yīng)對象。sessionHttpSession當(dāng)前會話對象。applicationjavax.servletServletContextServlet上下文對象。configServletConfigServlet配置對象。outjavax.servlet.jspJspWriter響應(yīng)輸出流對象。pageContextPageContextJSP的上下文對象。exceptionjava.langThrowable捕獲的異常對象。pageObject此JSP頁面實(shí)例引用。3.3.1request對象request對象封裝客戶端發(fā)出的請求。有關(guān)客戶端請求的信息,都可以通過request對象獲得。例如:請求頭、請求方法、請求的參數(shù)等內(nèi)容。request對象的用法和Servlet中的HttpServletRequest對象的用法一樣。例題3-11,使用request對象獲取表單信息。li311.jsp源代碼如下:<formname="form1"method="post"action="li311do.jsp">
用戶名:<inputtype="text"name="user"><br>
密碼:<inputtype="password"name="pwd"><br> <inputtype="submit"value="確定"> </form>3.3.1request對象li311do.jsp源代碼如下:<%@pageimport="java.util.Enumeration"%><%@pagecontentType="text/html"pageEncoding="UTF-8"%>
<%request.setCharacterEncoding("UTF-8"); Stringuser=request.getParameter("user"); Stringpwd=request.getParameter("pwd"); %>
您輸入的用戶名是:<%=user%><br>
您輸入的密碼是:<%=pwd%><br> 3.3.1request對象取得客戶端傳送給服務(wù)器端的所有參數(shù)的名稱:<br> <% Enumerationparams=request.getParameterNames(); while(params.hasMoreElements()){ Stringcur_name=(String)(params.nextElement()); out.println(cur_name+"="+request.getParameter(cur_name) +"<br>");} %>3.3.1request對象例題3-12,使用request對象獲得服務(wù)器端參數(shù)。request.jsp源代碼如下:request.getMethod():<%=request.getMethod()%><br>request.getRequestURI():<%=request.getRequestURI()%><br>request.getProtocol():<%=request.getProtocol()%><br>request.getServletPath():<%=request.getServletPath()%><br>request.getServerName():<%=request.getServerName()%><br>request.getServerPort():<%=request.getServerPort()%><br>request.getRemoteUser():<%=request.getRemoteUser()%><br>request.getRemoteAddr():<%=request.getRemoteAddr()%><br>request.getRemotHost():<%=request.getRemoteHost()%><br>3.3.2response對象response對象封裝對客戶端響應(yīng)的內(nèi)容,主要功能是將服務(wù)器處理后的結(jié)果傳回到客戶端輸出,也常用于與Cookie有關(guān)的操作及網(wǎng)頁的重定向。表3-4列出了response對象的常用方法。3.3.2response對象方法名稱功能說明voidsendRedirect(URL)將response對象重新定位到另一個頁面進(jìn)行處理,完全跳轉(zhuǎn)到新頁面。voidsetHeader(Stringname,Stringvalue)頁面定時刷新或跳轉(zhuǎn)。setContentType(Stringtype)設(shè)置響應(yīng)的MIME類型。voidaddCookie(Cookiecookie)向響應(yīng)中加入一個Cookie。voidaddHeader(Stringname,Stringvalue)向響應(yīng)頭中加入一項(xiàng)內(nèi)容。voidsendError(intsc)向客戶端發(fā)送一個代表特定錯誤的HTTP響應(yīng)狀態(tài)代碼,由sc指定。voidsendError(intsc,Stringmsg)向客戶端發(fā)送狀態(tài)碼和錯誤信息。表3-4response對象常用方法3.3.2response對象例題3-13,實(shí)現(xiàn)網(wǎng)頁重定向。response.html源代碼如下:<formname="form1"method="post"action="response.jsp"><p>用戶名:<inputtype="text"name="username"size="20"></p><p><inputtype="submit"value="提交"></form>3.3.2response對象response.jsp源代碼如下:<%@pagecontentType="text/html;charset=UTF-8"%><%Stringuser=request.getParameter("username");//獲取用戶的選擇//判斷用戶的信息,根據(jù)用戶的信息,把頁面重定向到相應(yīng)的頁面if(user.equals("tom"))response.sendRedirect("tom.html");elseif(user.equals("jack"))response.sendRedirect("jack.html");%>3.3.2response對象注意:與<jsp:forward>指令區(qū)別:使用response對象的sendRedirect(
)方法后,瀏覽器地址欄內(nèi)的內(nèi)容為重定向的文件地址;而<jsp:forward>指令執(zhí)行后瀏覽器地址欄內(nèi)的內(nèi)容不發(fā)生變化。3.3.2response對象例題3-14,設(shè)置頁面每隔10秒自動刷新。time.jsp源代碼如下:<body><p>現(xiàn)在的時間是:<%=newjava.util.Date()%></p><%response.setHeader("Refresh","10");%></body>3.3.2response對象例題3-15,設(shè)置響應(yīng)頭屬性。setcontenttype.jsp源代碼如下:<%@pagecontentType="text/html;charset=UTF-8"%><%Stringstr=request.getParameter("submit"); if(str==null){ str=""; } if(str.equals("yes")){ response.setContentType("application/msword;charset=UTF-8");}%><html> <bodybgcolor=green>
我正在學(xué)習(xí)response對象的setContentType方法將當(dāng)前頁面保存為Word文檔嗎? <formmethod="post"name="form"action=""> <inputtype="submit"value="yes"name="submit"> </form> </body></html>3.3.3session對象session對象用來保存每個用戶信息,在第一個JSP頁面被裝載時由服務(wù)器自動創(chuàng)建,完成會話期管理。所謂“會話”是指從一個客戶打開瀏覽器并連接到服務(wù)器開始,到客戶關(guān)閉瀏覽器離開這個服務(wù)器結(jié)束為止。當(dāng)客戶在一個會話內(nèi),訪問一個服務(wù)器并且在這個服務(wù)器的幾個頁面之間反復(fù)連接,反復(fù)刷新一個頁面時,服務(wù)器需要用session對象來記錄這是同一個客戶。session對象的生命周期在客戶端向該頁面發(fā)出請求時建立,在session對象到期或者被終止時撤銷。
表3-5session對象常用方法3.3.3session對象方法名稱功能說明ObjectgetAttribute(Stringname)取得保存在session中指定名稱的屬性值。voidsetAttribute(Stringname,Objectobj)把指定名稱的屬性和值存入session。StringgetId()返回當(dāng)前session對象的會話ID。voidinvalidate()關(guān)閉會話,取消session對象。longgetCreationTime()返回session對象的創(chuàng)建時間,以毫秒計算,由零時算起。longgetLastAccessedTime()返回當(dāng)前session對象最后一次操作的時間,單位是毫秒,由零時算起。longgetMaxInactiveInterval()取得session對象的最大生存時間,若超時這個時間,session將會失效。booleanisNew()判斷是否是一個新的session。voidsetMaxInactiveInterval(intinterval)設(shè)定session對象的超時周期(秒)。設(shè)為-1時,表示會話永不過期。3.3.3session對象例題3-16,使用session對象記錄表單信息。session.jsp源代碼如下:
<formmethod="post"action="result.jsp">
請輸入姓名:<inputtype="text"name="name"> <inputtype="submit"value="確定"> </form>3.3.3session對象session.jsp要求用戶輸入姓名并提交至result.jsp文件處理。result.jsp源代碼如下:<%request.setCharacterEncoding("UTF-8");Stringu_name=request.getParameter("name");session.setAttribute("username",u_name);%>
您的姓名是:<%=u_name%><p> <formmethod="post"action="result2.jsp">
請輸入您的帳號: <inputtype="text"name="account"size="10"> <inputtype="submit"value="確定"> <inputtype="reset"value="重置"> </form>3.3.3session對象使用JSP表達(dá)式輸出姓名后,繼續(xù)要求用戶輸入帳號,并提交給result2.jsp。result2.jsp源代碼如下:<%!Stringaccount="";%> <%account=request.getParameter("account"); Stringname=(String)session.getAttribute("username"); %>
姓名:<%=name%> <p>
帳號:<%=account%></p>3.3.3session對象例題3-17,session生命周期。Sessionlife.jsp源代碼如下:<body> <%Strings=session.getId();%> <p> YoursessionobjectIDis:<%=s%> <%//ifsessionisnew,setinitialvalueif(session.isNew()){session.setMaxInactiveInterval(10);session.setAttribute("expire","10");out.println("ifsessionisinactivein10seconds,expire");}else3.3.3session對象{Stringstr_expire_time=(String)session.getAttribute("expire");longcreate_time=session.getCreationTime();longcurrent_time=System.currentTimeMillis();longexist_time=(current_time-create_time)/1000;out.println("session已存在"+exist_time+"秒");if(exist_time>=Integer.parseInt(str_expire_time)){out.println("session時間已到自動失效");session.invalidate();}}%> 3.3.4application對象application對象可將信息保存在服務(wù)器中,直到服務(wù)器關(guān)閉。application對象能為多個應(yīng)用程序保存信息,與session相比,它的生命周期更長,從服務(wù)器啟動開始至服務(wù)器關(guān)閉為止。3.3.4application對象表3-6application對象常用方法方法名稱功能說明ObjectgetAttribute(Stringname)取得application對象中名為name的屬性值。EnumerationGetAttributeNames()取得所有Application對象的屬性名稱。voidsetAttribute(Stringname,Objectobj)將保存在application對象的name屬性賦值為obj對象。voidremoveAttribute(Stringname)刪除保存在application對象中的name屬性。intgetMajorVersion()取得服務(wù)器主要的ServletAPI版本號。intgetMinorVersion()取得服務(wù)器次要的ServletAPI版本號。StringgetServerInfo()取得服務(wù)器的名稱和版本。StringgetRealPath("/application1.jsp")返回某虛擬路徑的真實(shí)路徑。3.3.4application對象例題3-18,記錄網(wǎng)站被訪問次數(shù)。application.jsp源代碼如下:<%intnum;if(application.getAttribute("num")==null){application.setAttribute("num","1");}else{num=Integer.parseInt((String)application.getAttribute("num"));num++;application.setAttribute("num",Integer.toString(num));}%><h1>這個頁面已經(jīng)被瀏覽了<%=(String)application.getAttribute("num")%>次3.3.4application對象例題3-19,使用application對象獲取全局信息。application1.jsp源代碼如下:<%out.println("<strong>"+"JavaServletAPIVersion:"+"</strong>"application.getMajorVersion()+"."+application.getMinorVersion()+"<br>");out.println("RealPathofapplication1.jspis:"+application.getRealPath("/application1.jsp")+"<br>");out.println("versionandnameofwebServeris:"+application.getServerInfo());%>3.3.5out對象out對象是JSP使用最頻繁的對象,能把結(jié)果輸出到網(wǎng)頁上。Out對象的生命周期是當(dāng)前頁面,每一個JSP頁面都有一個out對象。Out對象最常用的方法是out.println(),在輸出的數(shù)據(jù)后面會自動加上換行的符號。但這個空行只是在輸出的html代碼的空行,在瀏覽器解析時這個空行將被忽略,要想在頁面中實(shí)現(xiàn)換行,需要通過out.println(“<br>”)來實(shí)現(xiàn)。3.3.5out對象表3-7out對象常用方法方法名稱功能說明voidprint()向客戶端瀏覽器輸出各種類型的數(shù)據(jù)。voidprintln()向客戶端瀏覽器輸出各種類型的數(shù)據(jù)并換行。voidclear()清除輸出緩沖區(qū)的內(nèi)容,不將數(shù)據(jù)輸出到客戶端。voidclearBuffer()清除輸出緩沖區(qū)的內(nèi)容,并將數(shù)據(jù)輸出到客戶端。voidclose()關(guān)閉輸出流。intgetBufferSize()取得目前緩沖區(qū)的大小,單位為KB。intgetRemaining()取得緩沖區(qū)未占用空間大小,單位為KB。booleanisAutoFlush()表示如緩沖區(qū)滿了是否會自動清除。Page指令autoFlush屬性為true會自動清除;若為false,不自動清除且會產(chǎn)生異常處理??梢杂?lt;@pageautoFlush=”true/false”%>來設(shè)置。3.3.5out對象例題3-20,out對象緩沖區(qū)設(shè)置。out1.jsp源代碼如下:<%@pagecontentType="Text/html"pageEncoding="UTF-8"%><%@pagebuffer="1kb"autoFlush="true"%><%out.println("hello!"+"<br>");out.clear();out.println("Howareyou?"+"<br>");out.println("BufferSizeoftheOutObjectis:"+out.getBufferSize()+"<br>");out.println("RemainofBufferSizeis:"+out.getRemaining()+"<br>");%> <%for(inti=0;i<1500;i++)out.print("c");%> <%=out.isAutoFlush()%>3.3.6exception對象JSP文件執(zhí)行時發(fā)生錯誤時會產(chǎn)生異常,這些異常信息封裝于exception對象。exception對象并不是在每一個JSP頁中都能夠使用。若要使用exception對象,必須在page指令中設(shè)定<%@pageisErrorPage=“true”%>,否則在編譯時會產(chǎn)生錯誤。3.3.6exception對象表3-8exception對象常用方法方法名稱功能說明StringgetMessage()返回描述錯誤信息的字符串。voidprintStackTrace()以標(biāo)準(zhǔn)錯誤的形式輸出一個錯誤和及棧軌跡。StringtoString()以字符串的形式返回一個對異常的描述3.3.7其他內(nèi)部對象1.Config對象config對象提供了對每一個給定的服務(wù)器程序及JSP頁面的ServletConfig對象的訪問,該對象封裝了初始化參數(shù)以及實(shí)用方法。config對象的常用方法如表3-9所示。方法名稱功能說明getInitParameter(Stringname)返回指定初始參數(shù)的值,沒有則返回NULL。getInitParameterNames()返回所有初始參數(shù)的名稱。getServletName()返回正在調(diào)用的Servlet的名稱。getServletContext()返回正在調(diào)用的Servlet的環(huán)境信息。3.3.7其他內(nèi)部對象例題3-21,使用config對象獲取參數(shù)值。config.jsp主要源代碼如下:<%Enumerationpara=config.getInitParameterNames();while(para.hasMoreElements()){Stringpname=(String)para.nextElement();out.println(pname+"="+config.getInitParameter(pname)+"<br>");}%>3.3.7其他內(nèi)部對象2.Pagecontext對象pageContext象不僅能夠獲取其它8個隱式對象,而且還能通過操作屬性來存儲數(shù)據(jù)。pageContext對象的相關(guān)方法如表3-10所示。3.3.7其他內(nèi)部對象方法名稱功能說明ServletRequestgetRequest()返回當(dāng)前的Request對象。ServletResponsegetResponse()返回當(dāng)前的Response對象。HttpSessiongetSession()返回當(dāng)前的Session對象。ExceptiongetException()返回當(dāng)前的Exception對象。ObjectgetAttributeNamesInScope()返回所有指定范圍的屬性名。voidsetAttribute(Stringname,Objectobj,intscope)設(shè)置pageContext對象的屬性。ObjectgetAttribute(Stringname,intscope)獲取pageContext對象的屬性。voidremoveAttribute(Stringname,intscope)刪除指定范圍內(nèi)名為name的屬性。ObjectfindAttribute(Stringname)從4個域?qū)ο笾胁檎颐麨閚ame的屬性。表3-10pageContext對象獲取隱式對象及操作屬性相關(guān)方法3.3.7其他內(nèi)部對象pageContext對象的作用范圍有4個值,具體如下:(1)pageContext.PAGE_SCOPE:表示頁面范圍。(2)pageContext.REQUEST_SCOPE:表示請求范圍。(3)pageContext.SESSION_SCOPE:表示會話范圍。(4)pageContext.APPLICATION_SCOPE:表示W(wǎng)eb應(yīng)用程序范圍。3.3.7其他內(nèi)部對象3.Page對象page對象是JSP文件產(chǎn)生的類對象,更準(zhǔn)確地說,它代表JSP被轉(zhuǎn)譯后的Servlet,因此,它可以調(diào)用Servlet類所定義的方法。預(yù)先設(shè)定page指令的info屬性,調(diào)用page對象的getServletInfo()的方法將輸出info屬性值。3.4CookieCookie是在HTTP協(xié)議下,服務(wù)器維護(hù)客戶端上信息的一種方式。瀏覽器與Web服務(wù)器之間是使用HTTP協(xié)議進(jìn)行通信的,當(dāng)用戶發(fā)出頁面請求時,Web服務(wù)器只是簡單地進(jìn)行響應(yīng),然后就關(guān)閉這個連接,并不記錄這次連接的狀態(tài)。因此當(dāng)一個頁面請求發(fā)送到Web服務(wù)器時,無論該用戶是否是第一次來訪,服務(wù)器都會把它當(dāng)做是第一次來對待,這種實(shí)現(xiàn)方法簡單而有效,但在需要保存連接狀態(tài)的情況下有著明顯的缺陷,Cookie可以有效地解決這個問題。3.4.1Cookie概述Cookie實(shí)際上是web服務(wù)器保存在用戶硬盤上的一段純文本信息,文件名通常為cookies.txt。當(dāng)用戶訪問某個Web服務(wù)器時,Web服務(wù)器將要求瀏覽器查找并返回先前發(fā)送給瀏覽器的Cookie信息來識別上次連接的狀態(tài)。Cookie對象通常在瀏覽器端保存連接過程中的一些參數(shù),比如用戶名和密碼等。Cookie的目的就是為了用戶方便,為了網(wǎng)站增值,不會造成嚴(yán)重的安全威脅。瀏覽器一般只允許存放300個Cookie,每個站點(diǎn)最多存放20個Cookie,每個Cookie的大小限制為4KB,因此Cookie不會塞滿用戶的硬盤,更不會被用作“拒絕服務(wù)”攻擊手段。3.4.2Cookie的基本操作Cookie是以“關(guān)鍵字=值”(key=value)的格式來保存記錄的,其基本操作包括創(chuàng)建、傳送和讀取Cookie對象。1.創(chuàng)建Cookie對象調(diào)用Cookie對象的構(gòu)造函數(shù)可以創(chuàng)建Cookie。Cookie對象的構(gòu)造函數(shù)有兩個字符串參數(shù):Cookie名字和Cookie值。創(chuàng)建Cookie的
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年廣東省深圳市單招職業(yè)傾向性考試題庫及參考答案一套
- 2025年甘孜職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫及答案1套
- 職業(yè)生態(tài)損害責(zé)任深度剖析與研究報告
- 社交媒體對個體心理健康的影響-第1篇-深度研究
- 災(zāi)后重建規(guī)劃策略-第1篇-深度研究
- 容器化技術(shù)產(chǎn)業(yè)生態(tài)構(gòu)建-深度研究
- 高并發(fā)數(shù)據(jù)管理-深度研究
- 康養(yǎng)院項(xiàng)目可行性研究報告
- 非洲產(chǎn)業(yè)升級路徑探討-深度研究
- 公墓項(xiàng)目可行性研究報告
- 《基礎(chǔ)英語》課件 Unit 1 Thinking as a Hobby
- 河南省地圖含市縣地圖矢量分層地圖行政區(qū)劃市縣概況ppt模板
- 動畫基礎(chǔ)知識ppt(完整版)課件
- 中國音樂史PPT講稿課件
- 橋梁模板施工方案最終版
- 雅思大作文資料_十大類題材_解析詳細(xì)_應(yīng)有盡有(最好全部打印后看_非常全)
- 部編版小學(xué)六年級書法教案【16課時】電子稿
- 廣元九州施工合同正式
- 蘭州商學(xué)院二級學(xué)院權(quán)力運(yùn)行流程圖
- 三毛流浪記連環(huán)畫全集-漫畫
- 預(yù)埋件計算公式
評論
0/150
提交評論