




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
JSP語(yǔ)法和標(biāo)簽6.1JSP基本語(yǔ)法6.2JSP標(biāo)準(zhǔn)操作元素6.3JSP內(nèi)置對(duì)象6.4其他內(nèi)置對(duì)象6.1JSP基本語(yǔ)法一、JSP的基本語(yǔ)法網(wǎng)頁(yè)結(jié)構(gòu):JSP頁(yè)面程序是在傳統(tǒng)的靜態(tài)頁(yè)面程序中加入Java描寫的動(dòng)態(tài)頁(yè)面處理部分。JSP頁(yè)面程序數(shù)據(jù)由兩部分內(nèi)容構(gòu)成,元素?cái)?shù)據(jù)和固定模版數(shù)據(jù)。元素?cái)?shù)據(jù):被JSP引擎所解釋的元素類型的實(shí)例。固定模版數(shù)據(jù):HTML及XML標(biāo)記符的數(shù)據(jù),這部分?jǐn)?shù)據(jù)不被JSP引擎解釋,通常原封不動(dòng)地返回客戶瀏覽器。6.1JSP基本語(yǔ)法二、JSP的三種元素類型:1.腳本元素聲明﹑表達(dá)式和Java程序語(yǔ)句,書寫在標(biāo)簽<%和%>之
間。2.指令元素3.標(biāo)準(zhǔn)操作元素
6.1JSP基本語(yǔ)法6.1.1JSP基本語(yǔ)法示例6.1.2注釋6.1.3轉(zhuǎn)義符6.1.4JSP腳本元素(Scriptlet)6.1.5JSP指令元素6.1.1JSP基本語(yǔ)法示例<HTML><HEAD><TITLE>SampleJSPExample</TITLE></HEAD><BODY><FORMACTION="rex4_1.jsp"METHOD="get"><CENTER><TABLE><TR><TD>用戶名:</TD><TD><INPUTTYPE=textNAME=usernamesize=20></TD></TR><TR><TD>次數(shù):</TD><TD><INPUTTYPE=textNAME=countSIZE=20></TD></TR><TR><TDALIGN="CENTER"COLSPAN="2"><INPUTTYPE="Submit"VALUE="發(fā)送">
<INPUTTYPE="reset"VALUE="重置"></TD></TR></TABLE></CENTER></FORM></BODY></HTML>6.1.1JSP基本語(yǔ)法示例<%@pagelanguage="java"%><HTML><HEAD><TITLE>SimpleJSPExample</TITLE><P><%Stringstrname=request.getParameter("username");%>
<%intnumCount=Integer.parseInt(request.getParameter("count"));for(inti=0;i<numCount;i++){%><%=strname%>,welcometoJSP!<BR>
<%}%></P></HEAD><%@includefile="footer.htm"%></HTML>6.1.1JSP基本語(yǔ)法示例JSP程序中包括HTML標(biāo)簽和JSP標(biāo)簽,JSP代碼是嵌在<%和%>之間的。下面對(duì)該JSP文件作簡(jiǎn)要說明。(1)<%@pagelanguage="java"%>是一個(gè)JSP頁(yè)面設(shè)置指令,它表示這個(gè)頁(yè)面上使用的代碼是用Java語(yǔ)言書寫的。(2)<%Stringstrname=request.getParameter("username");%>這段代碼中定義了一個(gè)String類型(字符串類型)的變量strname。通過內(nèi)置對(duì)象request的方法getParameter可以獲取通過GET方式傳遞上來(lái)的表單中username對(duì)象的值,并賦值給變量strname。6.1.1JSP基本語(yǔ)法示例3)同樣的方法可以將表單中count對(duì)象的值賦給int型變量numCount,Integer.parseInt()的作用是將字符串轉(zhuǎn)化為整型。接下來(lái)的代碼使用一個(gè)循環(huán)結(jié)構(gòu)完成輸出,請(qǐng)注意JSP標(biāo)簽和HTML標(biāo)簽的結(jié)合使用。(4)<%@includefile="Footer.htm"%>是一個(gè)JSP包含指令,在頁(yè)面中包含另一個(gè)HTML文件footer.htm的內(nèi)容,footer.htm只包含一行HTML代碼。<p>SimpleJSPexample@2011ComputerCENTERofECNU</p>6.1.1JSP基本語(yǔ)法示例(5)JSP的執(zhí)行順序如下。
服務(wù)器接受客戶端的JSP網(wǎng)頁(yè)請(qǐng)求,其中包含表單的數(shù)據(jù)。
服務(wù)器端JSP引擎把JSP代碼轉(zhuǎn)換成Servlets代碼;Servlets是服務(wù)器端執(zhí)行的程序代碼,它的主要功能是:在服務(wù)器端執(zhí)行JSP頁(yè)面中的JSP元素?cái)?shù)據(jù),并將需要顯示的結(jié)果嵌入HTML頁(yè)面中返回客戶端;服務(wù)器端不處理JSP頁(yè)面中的固定模板數(shù)據(jù),直接交給客戶端的瀏覽器執(zhí)行顯示。JSP引擎調(diào)用服務(wù)器端的Java編譯器把Servlets代碼編譯為.class文件(保存在服務(wù)器端的相關(guān)目錄中)。JVM(JavaVirtualMachine,Java虛擬機(jī))執(zhí)行.class文件。
結(jié)果返回給請(qǐng)求的客戶端。6.1.2注釋JSP提供了兩類注釋的方法:一類注釋是對(duì)JSP網(wǎng)頁(yè)自身的注釋;另一類注釋是會(huì)出現(xiàn)在發(fā)送給客戶的生成網(wǎng)頁(yè)中的注釋。1.JSP網(wǎng)頁(yè)自身注釋JSP網(wǎng)頁(yè)自身注釋又稱隱藏式注釋,它是對(duì)JSP程序進(jìn)行的注釋,服務(wù)器不會(huì)將它發(fā)送到客戶端,對(duì)客戶而言,是看不見即隱藏的。其語(yǔ)法格式如下:<%--JSP網(wǎng)頁(yè)自身的注釋內(nèi)容--%>注意:(1)這種注釋是不允許嵌套存在的;(2)注釋內(nèi)容可以是除了“--%>”外的任何內(nèi)容。若想在注釋中使用“--%>”,必須使用Escape表示法,即用“--%\>”來(lái)表示。6.1.2注釋JSP網(wǎng)頁(yè)自身注釋示例。
程序代碼如下:<%@pagelanguage="java"%><HTML><HEAD><TITLE>JSPCommentTest</TITLE></HEAD><BODY><H2>JSPCommentTest</H2><%--Thiscommentwillnotbevisibleinsourcecode--%></BODY></HTML>6.1.2注釋JSP網(wǎng)頁(yè)自身注釋示例程序代碼如下:<%@pagelanguage="java"%><HTML><HEAD><TITLE>JSPCommentTest</TITLE></HEAD><BODY><H2>JSPCommentTest</H2><%--Thiscommentwillnotbevisibleinsourcecode--%></BODY></HTML>6.1.2注釋
也可以使用腳本語(yǔ)言的注釋方法對(duì)JSP程序進(jìn)行注釋,但是這種注釋必須包含在<%與%>之間,方法如下:<%
程序段/*多行注釋內(nèi)容
多行注釋內(nèi)容*/
程序段//單行注釋內(nèi)容
程序段%>
通常,這類注釋多用于進(jìn)行程序說明,注釋自己的JSP程序。這些注釋內(nèi)容在JSP編譯時(shí)被完全忽略,在最終傳遞到客戶端的網(wǎng)頁(yè)中這種注釋是不存在的,既不會(huì)顯示在客戶的瀏覽器中,也不會(huì)在源代碼中看到。6.1.2注釋2.發(fā)送到客戶端的注釋
生成發(fā)送到客戶端的注釋又稱“嵌入式注釋”,一般采用HTML及XML的語(yǔ)法格式:<!--發(fā)送到客戶端的注釋-->JSP引擎對(duì)此類注釋不作任何解釋,而直接將其返回給客戶端的瀏覽器,其結(jié)果是會(huì)在客戶端頁(yè)面中顯示一個(gè)注釋;同時(shí),客戶在查看源代碼時(shí)可以看到這條注釋。
但需要注意的是,在這種注釋中可以出現(xiàn)動(dòng)態(tài)數(shù)據(jù),這是與一般HTML注釋最大的不同之處。注釋中的動(dòng)態(tài)數(shù)據(jù)是通過表達(dá)式(expression)來(lái)表示的,其語(yǔ)法格式如下:
<!--注釋<%=expression%>注釋-->其中表達(dá)式是任何合法表達(dá)式。6.1.2注釋動(dòng)態(tài)數(shù)據(jù)注釋示例程序代碼如下:<%@pagelanguage="java"%><HTML><HEAD><TITLE>ClientCommentTest</TITLE></HEAD><BODY><H2>ClientCommentTest</H2><!--Thiscommentwillnotbevisibleinsourcecode--><!--CommentgenerateDateis<%=(newjava.util.Date()).toString()%>--></BODY></HTML>6.1.3轉(zhuǎn)義符“<%”、“%>”、“'”等符號(hào)被JSP引擎視作具有特定意義的符號(hào),若在JSP程序的字符串中需包含這些符號(hào),則需特別處理,即使用轉(zhuǎn)換符來(lái)表示,如表所示。轉(zhuǎn)義符表示
例如在隱藏式注釋中若需使用%>,則必須使用%\>來(lái)表示。<%--JSPCommentcan’tinclude--%\>.--%>符
號(hào)轉(zhuǎn)義符表示<%<\%%>%\>'\'"\"\\\6.1.4JSP腳本元素(Scriptlet)
JSP腳本元素是用來(lái)在JSP中包含腳本代碼,以<%開始并以%>結(jié)束,通常是一段Java代碼。在一個(gè)JSP頁(yè)面中,可以有多個(gè)腳本元素。在一個(gè)腳本小程序元素中聲明的變量稱為JSP頁(yè)面局部變量。利用這個(gè)特性,可將一個(gè)程序段分割成幾個(gè)更小的程序段,從而在程序段間加入一些其他標(biāo)記元素,并且不會(huì)影響程序段內(nèi)容的執(zhí)行。在JSP腳本元素中聲明變量是和Java類似,語(yǔ)法格式如下:<%!Declaration(s)%>
一次可以聲明一個(gè)或多個(gè)變量和方法,變量在聲明時(shí)可以設(shè)置初始值。聲明的內(nèi)容會(huì)插入最終生成的Servlets中,但不會(huì)產(chǎn)生任何傳送到客戶端的數(shù)據(jù)。6.1.4JSP腳本元素(Scriptlet)
聲明的使用,求兩數(shù)之和。程序代碼如下:<%@pagecontentType="text/html;charset=gb2312"%><%@pagelanguage="Java"%><HTML><HEAD><TITLE>DeclarationElements</TITLE></HEAD><BODY><%--聲明一個(gè)整型變量i--%><%!inti;%> <%--聲明兩個(gè)整型變量,其中m初始值為2,n初始值為4--%><%!intm=2,n=4;%> <%--聲明一個(gè)字符串變量s,其初始值為"Thesumis:" --%><%!Strings="Thesumis:";%><%--聲明一個(gè)Add()方法 --%><%!publicvoidAdd()
{i=m+n;}%><P><%=s%><%=i%></P></BODY></HTML>6.1.4JSP腳本元素(Scriptlet)運(yùn)行結(jié)果:Thesumis:0
聲明所定義變量或方法是指頁(yè)面級(jí)的變量或方法,即聲明內(nèi)容的作用域是在一個(gè)JSP頁(yè)面中有效。但對(duì)于聲明方法內(nèi)部定義的變量,則是僅供方法內(nèi)部使用,當(dāng)方法被調(diào)用,方法內(nèi)部變量被分配內(nèi)存,調(diào)用結(jié)束時(shí)即釋放所占用內(nèi)存。JSP引擎將JSP頁(yè)面編譯為Java文件時(shí),頁(yè)面級(jí)的變量作為類的成員變量,這些變量的內(nèi)存空間將在服務(wù)器關(guān)閉后才會(huì)被釋放。當(dāng)多個(gè)客戶請(qǐng)求一個(gè)JSP頁(yè)面時(shí),JSP引擎為每個(gè)用戶都啟動(dòng)一個(gè)線程,這些線程將共享JSP的頁(yè)面級(jí)變量,所以JSP的頁(yè)面級(jí)變量是所有用戶的共享變量。
6.1.4JSP腳本元素(Scriptlet)
利用頁(yè)面級(jí)變量被所有用戶共享的特性,實(shí)現(xiàn)一個(gè)簡(jiǎn)單的網(wǎng)上投票實(shí)例。[例6-5]網(wǎng)上投票,有三位候選人,對(duì)用戶投票進(jìn)行統(tǒng)計(jì),并顯示當(dāng)前投票的結(jié)果。“投票”程序運(yùn)行效果圖6.1.4JSP腳本元素(Scriptlet)
在這個(gè)程序中,定義了一個(gè)頁(yè)面級(jí)數(shù)組變量vote,每個(gè)數(shù)組元素表示一個(gè)候選人的票數(shù)。只要Tomcat服務(wù)器不重啟,多次打開IE調(diào)用這個(gè)JSP頁(yè)面,可以觀察到vote數(shù)組在連續(xù)統(tǒng)計(jì)投票結(jié)果。6.1.4JSP腳本元素(Scriptlet)
在JSP腳本元素中除了可以嵌入Java代碼以外,可以直接輸出某個(gè)表達(dá)式的值到網(wǎng)頁(yè)的HTML內(nèi)容中,它的語(yǔ)法格式:<%=expression%>
表達(dá)式是在運(yùn)行時(shí)由服務(wù)器計(jì)算求值,其結(jié)果轉(zhuǎn)化成String插入該表達(dá)式在JSP頁(yè)面的相應(yīng)位置。如果表達(dá)式的結(jié)果不能轉(zhuǎn)化成String,將產(chǎn)生錯(cuò)誤異常。使用表達(dá)式,可在JSP頁(yè)面內(nèi)顯示動(dòng)態(tài)數(shù)據(jù)內(nèi)容。在使用表達(dá)式時(shí),有以下兩點(diǎn)需要注意:
不能用一個(gè)分號(hào)“;”作為表達(dá)式的結(jié)束符。
表達(dá)式元素可以很復(fù)雜,由多個(gè)表達(dá)式組成。6.1.4JSP腳本元素(Scriptlet)JSP腳本小程序元素是一段有效JSP腳本語(yǔ)言程序段,程序段內(nèi)容必須符合相應(yīng)腳本語(yǔ)言的語(yǔ)法規(guī)定。它的語(yǔ)法格式:<%JSP腳本小程序元素(Scriptlet)%>
下面這個(gè)例子是一個(gè)使用Java類Calendar的示例,由于類Calendar需要導(dǎo)入后才能使用,因此需要使用pageimport指令將其導(dǎo)入。[例6-6]創(chuàng)建根據(jù)當(dāng)前系統(tǒng)時(shí)間給出適當(dāng)?shù)膯柡蛘Z(yǔ)的JSP頁(yè)面程序,保存為程序ex6_6.jsp。6.1.5JSP指令元素
在JSP頁(yè)面中,可以使用JSP指令指定網(wǎng)頁(yè)的有關(guān)輸出方式、引用包、加載文件等相關(guān)設(shè)置。JSP中的三個(gè)指令是page、include和taglib。指令并不會(huì)輸出任何數(shù)據(jù)至客戶端,且有效范圍僅限于使用該指令的JSP網(wǎng)頁(yè)。指令的語(yǔ)法如下:<%@指令名稱
屬性1=,屬性2=,…%>6.1.5JSP指令元素1、page指令元素
網(wǎng)頁(yè)指令page用于定義與整個(gè)JSP頁(yè)面相關(guān)的屬性,對(duì)整個(gè)頁(yè)面有效,例如,在前面的例子中頻繁使用了page指令語(yǔ)句,如:<%@pagecontentType="text/html;charset=GB2312"%>該語(yǔ)句定義JSP頁(yè)面的contentType屬性為"text/html;charset=GB2312",這樣頁(yè)面就可以顯示標(biāo)準(zhǔn)的漢語(yǔ)。<%@pageimport="java.util.*"%>該語(yǔ)句在JSP頁(yè)面中導(dǎo)入了java.util.*類包。<%@pagelanguage="Java"%>該語(yǔ)句定義了在JSP頁(yè)面中使用的腳本語(yǔ)言是Java。6.1.5JSP指令元素
在一個(gè)JSP頁(yè)面可以使用多個(gè)page指令來(lái)指定屬性及其值,但除import屬性外,其他屬性只能使用一次page指令為該屬性設(shè)置值,即便設(shè)置的值相同也不行,例如,在一個(gè)JSP頁(yè)面中出現(xiàn)下面語(yǔ)句是錯(cuò)誤的。<%@pagelanguage="Java"%><%@pagelanguage="Java"%>(例:errorPage.jsp,isErrorpage.jsp)6.1.5JSP指令元素使用import屬性可以在JSP頁(yè)面導(dǎo)入多個(gè)類包,可以使用多個(gè)page指令,也可以在一個(gè)page指令中使用“,”為import屬性賦多個(gè)值,例如在一個(gè)JSP頁(yè)面中引入:java.util.*,java.io.*和java.sql.*3個(gè)包,可以寫為:<%@pageimport="java.util.*"%><%@pageimport="java.io.*"%><%@pageimport="java.sql.*"%>也可以寫為:<%@pageimport="java.util.*,"java.io.*","java.sql.*""%>當(dāng)JSP引擎將JSP頁(yè)面編譯為Java文件時(shí),在Java文件中會(huì)出現(xiàn)以下語(yǔ)句:importjava.util.*importjava.io.*importjava.sql.*6.1.5JSP指令元素屬性解釋默認(rèn)值language定義要使用的腳本語(yǔ)言,目前只能為JavaJavaextends使用自定義類指定要擴(kuò)展的類,只有在必要的時(shí)候才能這樣做默認(rèn)可忽略的屬性import在程序中導(dǎo)入一個(gè)或多個(gè)類/包,在同一頁(yè)面,頁(yè)面指令的屬性只有import可以設(shè)置多次JSP默認(rèn)import屬性的值已有:“java.lang.*”,“java.servlet.*”,“java.servlet.jsp*”,“java.servlet.http.*”session指定在一個(gè)HTTP(HypertextTransportProtocol,超級(jí)文本傳輸協(xié)議)會(huì)話中是否有該頁(yè)面參與,取值為true或falsetruebuffer指定到客戶的輸出流中的緩存的模式,取值為none/8kb/nkb默認(rèn)的buffer值不小于8KBautoFlash設(shè)置緩沖區(qū)填滿時(shí)是否進(jìn)行緩沖自動(dòng)刷新,值為false時(shí),運(yùn)行時(shí)會(huì)出現(xiàn)緩存溢出異常報(bào)錯(cuò)trueisThreadSafe設(shè)置JSP頁(yè)面是否支持多線程,值為false時(shí)限制每次只能有一個(gè)用戶訪問該頁(yè)面trueinfo為JSP頁(yè)面準(zhǔn)備一個(gè)字符串,該字符串可由servlet.getServletInfo()方法獲得默認(rèn)可忽略的屬性isErrorPage指定當(dāng)前頁(yè)面是否可以作為另一頁(yè)面的錯(cuò)誤處理網(wǎng)頁(yè),取值為true/falsefalseerrorPage指定當(dāng)前網(wǎng)頁(yè)的出錯(cuò)處理網(wǎng)頁(yè)的URL默認(rèn)可忽略的屬性contentType指定JSP字符的編碼和JSP頁(yè)面響應(yīng)的MIME類型,格式為“MIME類型;字符集類型”“text/htmlcharset=ISO-8859-1”6.1.5JSP指令元素常見的MIME類型 超文本標(biāo)記語(yǔ)言文本 .html,.html text/html
普通文本 .txt text/plain RTF文本 .rtf application/rtf GIF圖形 .gif image/gif JPEG圖形 .ipeg,.jpg image/jpeg au聲音文件 .au audio/basic MIDI音樂文件 mid,.midi audio/midi,audio/x-midi RealAudio音樂文件 .ra,.ram audio/x-pn-realaudio MPEG文件 .mpg,.mpeg video/mpeg AVI文件 .avi video/x-msvideo GZIP文件 .gz application/x-gzip TAR文件 .tar application/x-tar6.1.5JSP指令元素meta的用法
meta是HTML語(yǔ)言中的一個(gè)可選的標(biāo)記項(xiàng),位于HTML文件的標(biāo)頭部分。在meta標(biāo)記中定義的文字,在瀏覽器中并不顯示。那么,meta起什么作用呢?一、meta的用法
1、語(yǔ)法:
<metaname="name"content="string">
2、參數(shù)解析:
1)name項(xiàng):常用的選項(xiàng)有keywords,description,author等。
2)http-equiv項(xiàng):可用于代替name項(xiàng),常用的選項(xiàng)有creation-date,refresh等。
3)content項(xiàng):根據(jù)name項(xiàng)或http-equiv項(xiàng)的定義來(lái)決定此項(xiàng)填寫什么樣的字符串。6.1.5JSP指令元素舉例:<metaname="keywords"content="ChinaTravel,BeijingTravel,ChinaBeijing"><metaname="description"content="introduingSummerPalace,ForbiddenCity,Tiananmen,andsoon,includingmanypictures"><metaname="author"content="BeijingWayXNetSolutionCo.Ltd.">
<metahttp-equiv="Creation-date"content="23-Sept-98,18:28:33GMT">
<metahttp-equiv="refresh"content="10URL="/home.html">
6.1.5JSP指令元素2、include指令元素
文件加載指令include用來(lái)指定JSP文件被編譯的時(shí)候,需要插入的文本或者代碼。它只有一個(gè)屬性file,值為被包含文件的名稱。使用include指令的語(yǔ)法為:<%@includefile="被包含的文件名"%>
包含進(jìn)來(lái)的文件要能夠被JSP引擎控制和訪問,被包含的文件可以是一個(gè)HTML文件、一個(gè)JSP文件、一個(gè)文本文件或者是一個(gè)用Java語(yǔ)言寫成的代碼文件。如果被包含的文件是一個(gè)JSP文件,那么它里面的JSP的標(biāo)記就會(huì)被分析,并把它們的執(zhí)行結(jié)果和其他的文本內(nèi)容一起加入JSP包含文件中。
當(dāng)把一個(gè)文件插入到當(dāng)前JSP頁(yè)面合并成一個(gè)新的JSP頁(yè)面,所生成的JSP頁(yè)面也要符合JSP的語(yǔ)法,例如JSP語(yǔ)法不允許使用page指令對(duì)除import外的一個(gè)屬性多次賦值,如果兩個(gè)文件同時(shí)包含page指令對(duì)同一屬性進(jìn)行賦值,就會(huì)引起錯(cuò)誤。6.1.5JSP指令元素<!--include.jsp--><html><head><title>AnIncludeTest</title></head><bodybgcolor="white"><fontcolor="blue">Thecurrentdateandtimeare<%@includefile="date.jsp"%></font></body></html>6.1.5JSP指令元素<!--date.jsp--><%@pageimport="java.util.*"%><%=(newjava.util.Date()).toLocaleString()%>6.1.5JSP指令元素3、taglib指令元素
標(biāo)簽數(shù)據(jù)庫(kù)指令taglib用于定義一個(gè)標(biāo)簽庫(kù)及自定義標(biāo)簽的前綴,語(yǔ)法為:<%@tagliburi="擴(kuò)展標(biāo)簽的URI"prefix="擴(kuò)展標(biāo)簽的前綴"%>例如:定義標(biāo)簽庫(kù)pe4j-taglib和前綴pe4j的代碼為:<%@tagliburi="/pe4j-taglib"prefix="pe4j"%>這樣,在HTML中可以使用標(biāo)簽庫(kù)pe4j-tablib中定義的標(biāo)簽,例如:<pe4j:literalkey="Corp"subsystem="SYS"/><pe4j:CORPCOMBONAME="CorpCombo"SELECTEDVALUE="<%=CorpID%>"ONCHANGE="fnc_OnCorpChange()"/>6.2JSP標(biāo)準(zhǔn)操作元素
動(dòng)作控制標(biāo)簽是一種特殊的標(biāo)簽,用于執(zhí)行一些標(biāo)準(zhǔn)常用的JSP網(wǎng)頁(yè)動(dòng)作,例如將網(wǎng)頁(yè)轉(zhuǎn)向、使用JavaBean、設(shè)置JavaBean的屬性等。JSP規(guī)范中包含一些標(biāo)準(zhǔn)的動(dòng)作控制標(biāo)簽,它們必須通過適當(dāng)?shù)腏SP引擎來(lái)實(shí)現(xiàn),在JSP引擎的任何版本中或者是Web服務(wù)器中總是可用的。新的動(dòng)作控制標(biāo)簽可以通過<jsp:taglib>指令來(lái)引入。標(biāo)準(zhǔn)的動(dòng)作控制標(biāo)簽可以輔助那些定制的類型實(shí)現(xiàn)特定的JSP頁(yè)面。在JSP中標(biāo)準(zhǔn)標(biāo)簽有:<jsp:include>,<jsp:forward>,<jsp:plugin>,<jsp:param>,<jsp:useBean>,<jsp:setProperty>和<jsp:getProperty>。6.2JSP標(biāo)準(zhǔn)操作元素6.2.1include操作6.2.2forward操作6.2.3plugin操作6.2.4JavaBean操作6.2.1include操作<jsp:include>標(biāo)簽可以在即將生成的頁(yè)面上動(dòng)態(tài)地插入一些文件。<jsp:include>動(dòng)作的語(yǔ)法格式如下:<jsp:includepage=URLflush="TRue"><jsp:paramNAME="參數(shù)名稱1"VALUE="值1"/><jsp:paramNAME="參數(shù)名稱2"VALUE="值2"/>……</jsp:include>page屬性:指定需要包含進(jìn)頁(yè)面的文件的URL地址。使用<jsp:param>可以傳遞參數(shù)到要插入的JSP網(wǎng)頁(yè),參數(shù)設(shè)置可以省略,省略時(shí)還可以使用如下簡(jiǎn)單格式:<jsp:includepage=URLflush="true"/>6.2.2forward操作<jsp:forward>動(dòng)作是將瀏覽器顯示的網(wǎng)頁(yè)轉(zhuǎn)到另一個(gè)HTML網(wǎng)頁(yè)或者JSP網(wǎng)頁(yè)。一個(gè)<jsp:forward>有效地終止了當(dāng)前頁(yè)面的運(yùn)行,JSP引擎不會(huì)再處理這個(gè)頁(yè)面中剩下的任何內(nèi)容,緩沖區(qū)被清空。<jsp:forward>的語(yǔ)法格式如下,參數(shù)傳遞可省略:<jsp:forwardpage=URL><jsp:paramNAME="參數(shù)名稱1"VALUE="值1"/><jsp:paramNAME="參數(shù)名稱2"VALUE="值2"/></jsp:forward>若使用<jsp:param>將參數(shù)傳遞給JSP網(wǎng)頁(yè)時(shí),在JSP網(wǎng)頁(yè)中將可通過如下語(yǔ)法取得傳入的參數(shù)。request.getParameter("參數(shù)名稱");6.2.3plugin操作<jsp:plugin>動(dòng)作標(biāo)簽將根據(jù)瀏覽器的版本被替換成HTML標(biāo)簽<object>或<Applet>元素(<applet>在HTML3.2中定義,<object>在HTML4.0中定義)。作用是確保一個(gè)Java插件軟件可用,可以在瀏覽器中播放或顯示一個(gè)對(duì)象(典型的就是applet和bean),一般來(lái)說,<jsp:plugin>元素會(huì)指定對(duì)象是applet還是bean,同樣也會(huì)指定class的名字及位置,另外還會(huì)指定從哪里下載這個(gè)Java插件。6.2.3plugin操作<jsp:plugin>元素的語(yǔ)法格式如下:<jsp:plugin TYPE="bean|applet" code="保存類的文件名稱" codebase="類路徑" [NAME="對(duì)象名稱"] [archive="相關(guān)文件路徑"] [ALIGN="對(duì)齊方式"] [height="高度"] [width="寬度"] [hspace="水平間距"] [vspace="垂直間距"] [jrevesion="Java環(huán)境版本"] [nspluginurl="供NC使用的plugin加載位置"] [iepluginurl="供IE使用的plugin加載位置"]> <jsp:params> <jsp:paramNAME="參數(shù)名稱1"VALUE="值1"/> <jsp:paramNAME="參數(shù)名稱2"VALUE="值2"/> …… </jsp:params><jsp:fallback>錯(cuò)誤信息</jsp:fallback></jsp:plugin>6.2.3plugin操作<jsp:params>元素在啟動(dòng)的時(shí)候把參數(shù)名和值傳送到applet或者是bean中。如果插件沒有啟動(dòng),<jsp:fallback>元素就為用戶提供一個(gè)信息。如果插件已經(jīng)啟動(dòng),但是applet或者bean還沒有啟動(dòng),那么插件通常會(huì)彈出一個(gè)窗口,向用戶說明產(chǎn)生的錯(cuò)誤。6.2.4JavaBean操作useBean標(biāo)簽將用于定義JSP網(wǎng)頁(yè)中要使用的JavaBean對(duì)象。這是一個(gè)非常有用的功能,它可以使用可重用的Java類而不需犧牲性能。與useBean操作配合使用的還有<jsp:setProperty>和<jsp:getProperty>標(biāo)簽。<jsp:setProperty>標(biāo)簽是用來(lái)在JSP網(wǎng)頁(yè)中,設(shè)置所使用JavaBean對(duì)象的屬性。在使用<jsp:setProperty>之前必須使用<jsp:useBean>標(biāo)記對(duì)Bean進(jìn)行聲明。<jsp:getProperty>標(biāo)簽可將JavaBean的屬性值轉(zhuǎn)化為一個(gè)字符串,置入內(nèi)置的輸出對(duì)象,然后將之輸出顯示。6.3JSP內(nèi)置對(duì)象JSP提供JSP內(nèi)部可訪問的內(nèi)置對(duì)象,這種對(duì)象由實(shí)現(xiàn)類的容器提供,可直接使用,不需要再進(jìn)行聲明或?qū)嵗?,而且所有的?nèi)置對(duì)象只能在Scriptlet或表達(dá)式中才可使用。JSP中常用的內(nèi)置對(duì)象有:request、response、out、application、session、config、exception、page和pageContext。調(diào)用內(nèi)置對(duì)象的方法可以完成服務(wù)器端的絕大多數(shù)例行操作。6.3JSP內(nèi)置對(duì)象6.3.1request對(duì)象6.3.2response對(duì)象6.3.3out對(duì)象6.3.4application對(duì)象6.3.5session對(duì)象6.3.1request對(duì)象request對(duì)象是javax.servlet.ServletRequest的一個(gè)實(shí)例,來(lái)自客戶端的請(qǐng)求信息經(jīng)過JSP處理后,由request對(duì)象進(jìn)行封裝,在程序中調(diào)用request對(duì)象的方法就可以獲取封裝的客戶端信息。request對(duì)象使用方法getParameter獲取客戶端數(shù)據(jù),格式如下:request.getParameter(Strings)6.3.1request對(duì)象取得客戶端請(qǐng)求的對(duì)象getCookies()
返回客戶端的Cookie對(duì)象,結(jié)果是一個(gè)Cookie數(shù)組。(例:cookietest.jsp,cookietest2.jsp)
6.3.1request對(duì)象2.setAttribute(Stringname,java.lang.Objecto)
設(shè)定名字為name的request參數(shù)的值,該值由Object類型的o指定。3.getAttribute(Stringname)
返回name指定的屬性值。
RRD11Beanbean=newRRD11Bean();request.setAttribute("BEAN",bean);RRD11Beanbean=(RRD11Bean)request.getAttribute("BEAN");6.3.1request對(duì)象4.getParameter(Stringname)
獲得客戶端傳送給服務(wù)器端的參數(shù)值。
Stringp_name=request.getParameter(“username”)5.getParameterName()
獲得客戶端傳送給服務(wù)器端的所有參數(shù)名字,結(jié)果集是一個(gè)Enumeration的實(shí)例。6.getParameterValues(Stringname)
獲得指定參數(shù)所有值。6.3.2response對(duì)象response對(duì)象是javax.servlet.ServletResponse類的一個(gè)實(shí)例,它的作用與request對(duì)象正好相反,它封裝執(zhí)行JSP程序產(chǎn)生的響應(yīng),并被發(fā)送到客戶端。response對(duì)象可以使用由其父類ServletResponse所提供的方法。6.3.2response對(duì)象1.重定向sendRedirect方法可以將客戶端瀏覽器重定向到新的Web頁(yè)面。使用sendRedirect可以根據(jù)用戶的不同情況而定位到不同的頁(yè)面上去,重定向語(yǔ)句之后的代碼將不再執(zhí)行。例如,下面語(yǔ)句就是停止當(dāng)前網(wǎng)頁(yè)執(zhí)行,轉(zhuǎn)向執(zhí)行程序文件example.jsp。response.sendRedirect("example.jsp")6.3.2response對(duì)象sendRedirect方法和<jsp:forward>的區(qū)別:(1)當(dāng)使用<jsp:forward>操作重定向到另一個(gè)頁(yè)面,可以通過<jsp:param>傳遞參數(shù)到新的網(wǎng)頁(yè),新的網(wǎng)頁(yè)使用request對(duì)象的getParameter()方法可以讀取參數(shù)的值。而使用response對(duì)象的sendRedirect()方法不需要直接編碼URL,就可以實(shí)現(xiàn)傳遞參數(shù)。例如下面語(yǔ)句在重定向時(shí)傳遞了一個(gè)名為p值為234的參數(shù),同樣使用request對(duì)象訪問參數(shù)p。response.sendRedirect("example.jsp?p=234");(2)當(dāng)使用<jsp:forward>操作,兩個(gè)頁(yè)面之間可以通過request對(duì)象分享數(shù)據(jù),而response對(duì)象的sendRedirect()方法不支持這種數(shù)據(jù)共享。6.3.2response對(duì)象2.設(shè)置ContentType屬性page指令只能靜態(tài)地設(shè)置ContentType屬性,用來(lái)決定響應(yīng)的MIME值,使用response對(duì)象可以在程序中根據(jù)不同的需要?jiǎng)討B(tài)地設(shè)置ContentType屬性。6.3.3out對(duì)象out對(duì)象是javax.servlet.JspWriter類的一個(gè)實(shí)例。在JSP程序中,向客戶端輸出內(nèi)容時(shí)經(jīng)常會(huì)用到它,在前面的程序示例中,已接觸過很多使用out對(duì)象進(jìn)行輸入的語(yǔ)句。out對(duì)象提供兩種方法向客戶端輸出內(nèi)容:println()和print()。它們的區(qū)別在于,在服務(wù)器執(zhí)行JSP程序產(chǎn)生的回應(yīng)網(wǎng)頁(yè)中,println()產(chǎn)生的輸出內(nèi)容是換行的,而print()是產(chǎn)生的輸出內(nèi)容是不換行的。但要注意,在HTML代碼中,并不以代碼換行作為顯示時(shí)的換行標(biāo)志,顯示以<BR>為換行標(biāo)簽。out對(duì)象支持的輸出類型有:boolean,char,double,float,int,long,Object和String。6.3.3out對(duì)象向客戶端輸出數(shù)據(jù),out的基類是JspWrite.print()println()newLine():輸出一個(gè)換行符號(hào)。flush():輸出緩沖區(qū)里的數(shù)據(jù)close():關(guān)閉輸出流clearBuffer():清除緩沖區(qū)里的數(shù)據(jù),并且把數(shù)據(jù)寫到客戶端。Clear():清除緩沖區(qū)里的數(shù)據(jù),但不把數(shù)據(jù)寫到客戶端。
6.3.3out對(duì)象getBufferSize():獲得緩沖區(qū)的大小,緩沖區(qū)的大小可以用<%@pagebuffer=“size”%>設(shè)置。getRemaining():獲得緩沖區(qū)沒有使用的空間的大小。isAutoFlush():返回是否AutoFlush的布爾值??梢杂?/p>
<%@pageAutoFlush=“true/false”%>設(shè)置。6.3.4application對(duì)象
網(wǎng)絡(luò)程序是個(gè)分布式程序,很多用戶在不同的地方執(zhí)行并操作同一個(gè)程序,這時(shí)程序要能夠?qū)崟r(shí)地反映各種改變。例如,在一個(gè)聊天室程序中,一個(gè)聊天室的在線用戶名單、用戶在聊天室的發(fā)言對(duì)于每一個(gè)用戶都是相同的,而且能夠?qū)崟r(shí)更新,這些信息為所有網(wǎng)絡(luò)用戶所共享。又例如,在一些網(wǎng)站的首頁(yè)都有一個(gè)計(jì)數(shù)器,記錄訪問過網(wǎng)站的人數(shù),這個(gè)計(jì)數(shù)變量同樣是為所有用戶所共享的。6.3.4application對(duì)象1.application對(duì)象簡(jiǎn)介application對(duì)象則是以服務(wù)器為主角,服務(wù)器的啟動(dòng)和關(guān)閉決定了application的生命周期。服務(wù)器啟動(dòng)一個(gè)服務(wù),然后創(chuàng)建此服務(wù)下的Web應(yīng)用程序,同時(shí)為此Web應(yīng)用程序新建application對(duì)象,它將一直存在,直到服務(wù)器關(guān)閉,所以application對(duì)象開始于任一個(gè)JSP網(wǎng)頁(yè)被開始執(zhí)行時(shí),終止于服務(wù)器的關(guān)閉。當(dāng)一個(gè)用戶在客戶端訪問JSP頁(yè)面時(shí),JSP引擎會(huì)為該用戶啟動(dòng)一個(gè)線程,分配這個(gè)application對(duì)象,每一個(gè)應(yīng)用程序的所有線程將共享這個(gè)application對(duì)象,也就是說,所有的用戶將共享這個(gè)application對(duì)象。6.3.4application對(duì)象2.application對(duì)象的常用方法application是javax.servlet.ServletContext類的一個(gè)實(shí)例,它可以使用類ServerContext中的方法.(1)setAttribute方法
該方法是為應(yīng)用程序級(jí)變量賦值,若在application對(duì)象中還不存在這個(gè)變量,會(huì)添加這個(gè)變量。例如為應(yīng)用程序級(jí)變量maxnum賦值為25。application.setAttribute("maxnum",25);6.3.4application對(duì)象2.application對(duì)象的常用方法(2)getAttribute方法
該方法是獲取application對(duì)象中某個(gè)應(yīng)用程序級(jí)變量的值,該方法返回一個(gè)Object類型的數(shù)據(jù),使用時(shí)要根據(jù)應(yīng)用程序級(jí)變量的數(shù)據(jù)類型進(jìn)行類型轉(zhuǎn)換。例如,讀取maxnum值的語(yǔ)句為:Integernum=(Integer)application.getAttribute("maxnum");6.3.4application對(duì)象
應(yīng)用程序級(jí)變量只能是一個(gè)對(duì)象,而不能是基本數(shù)據(jù)類型變量如int、double。基本數(shù)據(jù)類型的變量要首先轉(zhuǎn)換成對(duì)應(yīng)的類,如int轉(zhuǎn)換成Integer。如果對(duì)Java不熟悉,也可以先將數(shù)字轉(zhuǎn)換成字符串,再保存到application對(duì)象,當(dāng)從application對(duì)象中取得數(shù)據(jù)時(shí),再轉(zhuǎn)換成數(shù)值。下面的語(yǔ)句中,第一句表示將把num變量(類型為整數(shù))轉(zhuǎn)換為字符串,再保存進(jìn)application對(duì)象;第二句表示把從application對(duì)象中取得數(shù)據(jù)再轉(zhuǎn)換成整數(shù)。例如:application.setAttribute("Num",String.valueOf(num1));intnum2=Integer.parseInt(application.getAttribute("Num").toString());由于application對(duì)象是為所有用戶所共享的,所以操作應(yīng)用程序級(jí)變量時(shí),要考慮同步處理。6.3.5session對(duì)象
很多商務(wù)網(wǎng)站必須能夠在用戶訪問的過程中記住用戶,為用戶提供個(gè)性化服務(wù),例如在商城購(gòu)物,站點(diǎn)應(yīng)該允許顧客同時(shí)購(gòu)買多個(gè)商品,反復(fù)在不同的位置挑選后,再一次性付款,在顧客購(gòu)物的過程中,網(wǎng)站需要記錄顧客的個(gè)人信息和已選購(gòu)的商品。這就需要會(huì)話級(jí)變量,記錄用戶在一段時(shí)間內(nèi)的邏輯上相關(guān)聯(lián)的不同請(qǐng)求。6.3.5session對(duì)象1.會(huì)話和會(huì)話idHTTP協(xié)議是一個(gè)無(wú)狀態(tài)協(xié)議,一個(gè)請(qǐng)求完成后,客戶端與服務(wù)器端的連接是關(guān)閉的,所以一個(gè)請(qǐng)求與另一個(gè)請(qǐng)求之間是沒有關(guān)聯(lián)的。一個(gè)客戶在訪問一個(gè)服務(wù)器時(shí),可能會(huì)在同一個(gè)應(yīng)用程序的多個(gè)頁(yè)面間反復(fù)連接,或刷新同一個(gè)頁(yè)面,服務(wù)器端不能自動(dòng)判斷這一個(gè)請(qǐng)求和另一個(gè)請(qǐng)求是不是屬于同一個(gè)客戶,所以在應(yīng)用程序中需要?jiǎng)?chuàng)建會(huì)話(session)記錄,記錄一個(gè)客戶的有關(guān)連接信息。從一個(gè)客戶打開瀏覽器并連接到服務(wù)器開始,一直到這個(gè)客戶關(guān)閉瀏覽器視為一個(gè)會(huì)話。JSP提供了內(nèi)置對(duì)象session幫助服務(wù)器識(shí)別一個(gè)客戶的連接。6.3.5session對(duì)象1.會(huì)話和會(huì)話id
當(dāng)一個(gè)客戶通過瀏覽器與服務(wù)器建立連接發(fā)出第一次請(qǐng)求時(shí),服務(wù)器會(huì)為這個(gè)客戶分配一個(gè)session對(duì)象,并為這個(gè)session對(duì)象分配了一個(gè)String類
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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至2030年中國(guó)農(nóng)業(yè)GIS成圖與處理軟件系統(tǒng)數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)全景照相機(jī)數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)二層牛皮反絨革數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)不銹鋼錘片式粉碎機(jī)數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)三相鼠籠式異步電動(dòng)機(jī)數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)PCB版插針式電源變壓器數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)LDPE薄膜袋數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 吊帶企業(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略研究報(bào)告
- 醫(yī)學(xué)級(jí)美白面霜套裝企業(yè)制定與實(shí)施新質(zhì)生產(chǎn)力戰(zhàn)略研究報(bào)告
- 基因檢測(cè)大數(shù)據(jù)分析行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- 初中九年級(jí)美術(shù)期末藝術(shù)測(cè)評(píng)指標(biāo)試卷及答案
- 藥品經(jīng)營(yíng)質(zhì)量管理制度樣本
- 有機(jī)農(nóng)業(yè)概述課件
- 學(xué)校托幼機(jī)構(gòu)腸道傳染病消毒隔離及防控要求
- 生產(chǎn)加工型小微企業(yè)安全管理考試(含答案)
- 沙子檢測(cè)報(bào)告
- 2023-2024學(xué)年部編版必修下冊(cè) 1-1 《子路、曾皙、冉有、公西華侍坐》教案2
- 無(wú)線電測(cè)向幻燈教材課件
- 第1課《我們的閑暇時(shí)光》課件
- 商務(wù)ktv項(xiàng)目計(jì)劃書
- 腦血管造影術(shù)護(hù)理查房課件
評(píng)論
0/150
提交評(píng)論