《Java Web技術(shù)及案例開(kāi)發(fā)》 課件 第4章 JSP基礎(chǔ)_第1頁(yè)
《Java Web技術(shù)及案例開(kāi)發(fā)》 課件 第4章 JSP基礎(chǔ)_第2頁(yè)
《Java Web技術(shù)及案例開(kāi)發(fā)》 課件 第4章 JSP基礎(chǔ)_第3頁(yè)
《Java Web技術(shù)及案例開(kāi)發(fā)》 課件 第4章 JSP基礎(chǔ)_第4頁(yè)
《Java Web技術(shù)及案例開(kāi)發(fā)》 課件 第4章 JSP基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩32頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第4章

JSP基礎(chǔ)本章思維導(dǎo)圖本章目標(biāo)了解JSP的概念及特點(diǎn)理解JSP和Servlet的區(qū)別與聯(lián)系理解JSP的執(zhí)行過(guò)程及原理掌握J(rèn)SP頁(yè)面的常用元素熟練使用JSP聲明熟練使用JSP表達(dá)式熟練使用JSP腳本JSP概述JSP(JavaSeverPages)是由SunMicrosystems公司倡導(dǎo)、多家公司一起參與建立的一種動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)標(biāo)準(zhǔn)。JSP是一種用于開(kāi)發(fā)包含動(dòng)態(tài)內(nèi)容的Web頁(yè)面的技術(shù),與Servlet一樣,也是一種基于Java的服務(wù)器端技術(shù),主要用來(lái)產(chǎn)生動(dòng)態(tài)網(wǎng)頁(yè)內(nèi)容。JSP技術(shù)具有以下優(yōu)點(diǎn):一次編寫(xiě),各處執(zhí)行簡(jiǎn)單快捷組件重用易于部署、升級(jí)和維護(hù)一個(gè)顯示當(dāng)前服務(wù)器系統(tǒng)時(shí)間的JSP頁(yè)面示例第一個(gè)JSP程序<%@pagelanguage="java"contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""/TR/html4/loose.dtd"><html><head><metahttp-equiv="Content-Type"content="text/html;charset=UTF-8"><title>第一個(gè)JSP頁(yè)面</title></head><body> <h1>您好!</h1>

<% java.util.Datedate=newjava.util.Date(); out.println("當(dāng)前時(shí)間是:"+date.toLocaleString()); %></body></html>JSP指令JSP腳本JSP同Servlet一樣,都運(yùn)行在Servlet容器中。當(dāng)用戶第一次訪問(wèn)JSP頁(yè)面時(shí),JSP頁(yè)面的處理過(guò)程:JSP執(zhí)行原理當(dāng)同一個(gè)JSP頁(yè)面再次被請(qǐng)求時(shí),只要該JSP文件沒(méi)有發(fā)生過(guò)改動(dòng),容器將直接調(diào)用已裝載的字節(jié)碼文件,而不會(huì)再執(zhí)行翻譯和編譯的過(guò)程,從而大大提高了服務(wù)器的性能。此過(guò)程如下:JSP執(zhí)行原理JSP請(qǐng)求執(zhí)行流程圖JSP執(zhí)行原理JSP頁(yè)面就是帶有JSP元素的常規(guī)Web頁(yè)面,它由模板文本和JSP元素組成。在一個(gè)JSP頁(yè)面中,所有非JSP元素的內(nèi)容稱為模板文本(templatetext)。模板文本可以是任何文本,如:HTML、XML,甚至可以是純文本。JSP并不依賴于HTML,它可以采用任何一種標(biāo)記語(yǔ)言。模板文本通常被直接傳遞給瀏覽器。在處理一個(gè)JSP頁(yè)面請(qǐng)求時(shí),模板文本和JSP元素所生成的內(nèi)容會(huì)合并,合并后的結(jié)果將作為響應(yīng)內(nèi)容發(fā)送給瀏覽器。JSP基本結(jié)構(gòu)JSP有三種類型的元素:腳本元素(scriptingelement)、指令元素(directiveelement)和動(dòng)作元素(actionelement)。JSP基本結(jié)構(gòu)腳本元素允許用戶將小段的代碼(一般情況下是Java代碼)添加到JSP頁(yè)面中,例如,可以加入一個(gè)if語(yǔ)句,以根據(jù)具體情況產(chǎn)生不同的HTML代碼。腳本元素在頁(yè)面被請(qǐng)求時(shí)執(zhí)行。JSP腳本元素包括:腳本、表達(dá)式、聲明和注釋。腳本元素所謂腳本代碼(Scriptlet),是指JSP中的代碼部分,在這個(gè)部分中可以使用幾乎任何Java的語(yǔ)法。語(yǔ)法【示例】判斷語(yǔ)句JSP腳本<%JSP腳本%><% if(Calendar.getInstance().get(Calendar.AM_PM)==Calendar.AM){%>上午好!<% }else{%>下午好!<% }%>JSP中的表達(dá)式可以被看做一種簡(jiǎn)單的輸出形式,需要注意的是,表達(dá)式一定要有一個(gè)可以輸出的值。語(yǔ)法【示例】使用JSP表達(dá)式顯示當(dāng)前時(shí)間JSP表達(dá)式<%=表達(dá)式%><%=(newjava.util.Date()).toLocaleString())%>JSP中的聲明用于聲明一個(gè)或多個(gè)變量和方法,并不輸出任何的文本到輸出流。在聲明元素中聲明的變量和方法將在JSP頁(yè)面初始化時(shí)進(jìn)行初始化。語(yǔ)法【示例】聲明變量和方法JSP聲明<%!JSP聲明%><%!inti=0;%><%!publicStringf(inti){ if(i<3) return("…"); return"";}%>JSP聲明變量與普通腳本變量的區(qū)別:聲明變量將做為JSP翻譯生成的Servlet的屬性,所有對(duì)該JSP的請(qǐng)求將共享此變量;普通腳本變量將做為JSP翻譯生成的Servlet的_jspService()方法中的局部變量,每個(gè)對(duì)該JSP的請(qǐng)求將被分配給一個(gè)同名的此變量。JSP聲明在JSP頁(yè)面中可以使用“<%----%>”的方式來(lái)注釋。服務(wù)器編譯JSP時(shí)會(huì)忽略“<%--”和“--%>”之間的內(nèi)容,注釋的內(nèi)容在客戶端不會(huì)被看到。示例JSP注釋<%--現(xiàn)在的時(shí)間為:--%><%-- Stringdate=java.text.DateFormat.getDateTimeInstance() .format(newjava.util.Date());--%><%--=date--%>JSP指令用來(lái)向JSP容器提供編譯信息。指令并不向客戶端產(chǎn)生任何輸出,所有的指令都只在當(dāng)前頁(yè)面中有效。JSP指令元素包括三種:page指令include指令taglib指令指令元素page指令描述了和頁(yè)面相關(guān)的信息,如:導(dǎo)入所需類包、指明輸出內(nèi)容類型、控制Session等。page指令一般位于JSP頁(yè)面的開(kāi)頭部分,在一個(gè)JSP頁(yè)面中,page指令可以出現(xiàn)多次,但是在每個(gè)page指令中,每一種屬性卻只能出現(xiàn)一次,重復(fù)的屬性設(shè)置將覆蓋掉先前的設(shè)置。語(yǔ)法【示例】page指令page指令<%@page屬性列表%><%@pagelanguage="java"contentType="text/html;charset=UTF-8"%>page指令的屬性及其含義:page指令的屬性屬性名說(shuō)明language設(shè)定JSP頁(yè)面使用的腳本語(yǔ)言,默認(rèn)為Java,目前只可使用Java語(yǔ)言import指定導(dǎo)入的Java軟件包或類名列表,若有多個(gè)類,中間用逗號(hào)隔開(kāi)isThreadSafe指定JSP容器執(zhí)行JSP程序的模式。有兩種模式:一種為默認(rèn)值true,代表JSP容器會(huì)以多線程方式運(yùn)行JSP頁(yè)面;另一種模式設(shè)定值為false,JSP容器會(huì)以單線程方式運(yùn)行JSP頁(yè)面。建議采用isThreadSage="true"模式contentType指定MIME類型和JSP頁(yè)面響應(yīng)時(shí)的編碼方式,默認(rèn)為“text/html;charset=ISO8859-1”pageEncoding指定JSP文件本身的編碼方式,例如pageEncoding="UTF-8"session指定JSP頁(yè)面中是否使用session對(duì)象,值為“true|false”,默認(rèn)為trueerrorPage設(shè)定JSP頁(yè)面發(fā)生異常時(shí)重新指向的頁(yè)面URL,指向的頁(yè)面文件要把isErrorPage設(shè)成trueisErrorPage指定此JSP頁(yè)面是否為處理異常錯(cuò)誤的網(wǎng)頁(yè),值為“true|false”,默認(rèn)falseisELIgnored指定JSP頁(yè)面是否忽略EL表達(dá)式,值為“true|false”,默認(rèn)falsebuffer指定輸出流是否需要緩沖,默認(rèn)值是8kb,與autoFlush一起使用,確定是否自動(dòng)刷新輸出緩沖,如果設(shè)成true,則當(dāng)輸出緩沖區(qū)滿的時(shí)候,刷新緩沖區(qū)而不是拋出一個(gè)異常autoFlush如果頁(yè)面緩沖區(qū)滿時(shí)要自動(dòng)刷新輸出,則設(shè)置為true;否則,當(dāng)頁(yè)面緩沖區(qū)滿時(shí)要拋出一個(gè)異常,則設(shè)置為falseimport屬性用來(lái)指定當(dāng)前JSP頁(yè)面中導(dǎo)入的Java軟件包或類名列表。如果需要導(dǎo)入多個(gè)類或包,可以在中間使用逗號(hào)隔開(kāi)或使用多個(gè)page指令?!臼纠渴褂胕mport屬性導(dǎo)入包和類或import屬性<%@pageimport="java.util.*,com.zkl.ch04.service.CustomerService"%><%@pageimport="java.util.*"%><%@pageimport="com.zkl.ch04.service.CustomerService"%>使用import屬性,可以使JSP腳本代碼中類的使用更加方便。例如,獲得當(dāng)前系統(tǒng)時(shí)間的JSP腳本,未使用import屬性時(shí)的代碼如下所示:使用import屬性導(dǎo)入相關(guān)類后的代碼如下所示:import屬性<%Stringdate=java.text.DateFormat.getDateTimeInstance() .format(newjava.util.Date());%><%@pageimport="java.text.DateFormat,java.util.Date"%><%Stringdate=DateFormat.getDateTimeInstance().format(newDate());%>contentType用于指定JSP輸出內(nèi)容的MIME類型和字符編碼方式,默認(rèn)值為:contentType="text/html;charset=ISO-8859-1"。通過(guò)設(shè)置contentType屬性的MIME類型,可以改變JSP輸出內(nèi)容的處理方式,從而實(shí)現(xiàn)一些特殊的功能。例如,可以將輸出內(nèi)容指定為Word、Excel類型的文件、將二進(jìn)制數(shù)據(jù)生成圖像等。演示將HTML代碼編寫(xiě)的表格轉(zhuǎn)換成MicrosoftOfficeExcel類型文件顯示。contentType屬性include指令的作用是在頁(yè)面翻譯期間引入另一個(gè)文件,被包含的文件可以是JSP、HTML或文本文件。語(yǔ)法【示例】include指令引入一個(gè)JSP頁(yè)面include指令<%@includefile="文件"%><%@includefile="header.jsp"%>include指令會(huì)先將當(dāng)前JSP和被包含的文件融合到一起形成一個(gè)Servlet再進(jìn)行編譯執(zhí)行;因此包含文件時(shí),必須保證新合并生成的文件符合JSP語(yǔ)法規(guī)則。例如,當(dāng)前文件和被包含文件的不能同時(shí)定義同名的變量,否則當(dāng)前文件將不能編譯通過(guò),會(huì)提示Duplicatelocalvariable錯(cuò)誤。include指令taglib指令用于指定JSP頁(yè)面所使用的標(biāo)簽庫(kù),通過(guò)該指令可以在JSP頁(yè)面中使用標(biāo)簽庫(kù)中的標(biāo)簽。語(yǔ)法其中:uri指定描述這個(gè)標(biāo)簽庫(kù)位置的URI,可以是相對(duì)路徑或絕對(duì)路徑;prefix指定使用標(biāo)簽庫(kù)中標(biāo)簽的前綴。對(duì)上述示例指定的標(biāo)簽庫(kù),可以使用如下代碼進(jìn)行標(biāo)簽的引用:其中“c”為標(biāo)簽的前綴,在JSP中有些前綴已經(jīng)保留,如果自定義標(biāo)簽,這些標(biāo)簽前綴不可使用。保留前綴有:jsp、jspx、java、javax、servlet、sun和sunw。taglib指令<%@tagliburi="標(biāo)簽庫(kù)URI"prefix="標(biāo)簽前綴"%><c:outvalue="helloworld"/>在JSP中可以使用XML語(yǔ)法格式的一些特殊標(biāo)記來(lái)控制行為,稱為JSP標(biāo)準(zhǔn)動(dòng)作(StandardAction)。利用JSP動(dòng)作可以實(shí)現(xiàn)很多功能,例如:動(dòng)態(tài)地插入文件、調(diào)用JavaBean組件、重定向頁(yè)面、為Java插件生成HTML代碼等。JSP規(guī)范定義了一系列標(biāo)準(zhǔn)動(dòng)作,常用有下列幾種:<jsp:include>動(dòng)作用于在頁(yè)面被請(qǐng)求時(shí)引入一個(gè)文件;<jsp:forward>動(dòng)作用于把請(qǐng)求轉(zhuǎn)發(fā)到另一個(gè)頁(yè)面;<jsp:useBean>動(dòng)作用于查找或?qū)嵗粋€(gè)JavaBean;<jsp:setProperty>動(dòng)作用于設(shè)置JavaBean的屬性;<jsp:getProperty>動(dòng)作用于輸出某個(gè)JavaBean的屬性。動(dòng)作元素<jsp:include>用于在頁(yè)面運(yùn)行時(shí)引入一個(gè)靜態(tài)或動(dòng)態(tài)的頁(yè)面,也稱為動(dòng)態(tài)包含。當(dāng)容器把JSP頁(yè)面翻譯成Java文件時(shí),并不會(huì)把JSP頁(yè)面中動(dòng)作指令include指定的文件與原JSP頁(yè)面合并成一個(gè)新頁(yè)面,而是告訴Java解釋器,這個(gè)文件在JSP運(yùn)行時(shí)才被處理。<jsp:include>元素如果包含的文件是普通的文本文件,就將文件的內(nèi)容發(fā)送到客戶端,由客戶端負(fù)責(zé)顯示;如果包含的文件是JSP文件,JSP容器就執(zhí)行這個(gè)文件,然后將執(zhí)行結(jié)果發(fā)送到客戶端,由客戶端負(fù)責(zé)顯示這些結(jié)果。<jsp:include><jsp:include>動(dòng)作可以包含一個(gè)或幾個(gè)<jsp:param>子動(dòng)作,用于向要引入的頁(yè)面?zhèn)鬟f數(shù)據(jù)。語(yǔ)法或其中:page指定引入文件的地址;flush="true"表示設(shè)定是否自動(dòng)刷新緩沖區(qū),默認(rèn)為false,可省略;在頁(yè)面包含大量數(shù)據(jù)時(shí),為縮短客戶端延遲,可將一部分內(nèi)容先行輸出;name指定傳入包含文件的變量名;value指定傳入包含文件的變量名對(duì)應(yīng)的值。<jsp:include><jsp:includepage="urlSpec"flush="true"/><jsp:includepage="urlSpec"flush="true"> <jsp:paramname="name"value="value"/>

</jsp:include>【示例】include動(dòng)作<jsp:include><jsp:includepage="show.jsp"> <jsp:paramname="name"value="qst"/> <jsp:paramname="password"value="123"/></jsp:include>include指令元素與include動(dòng)作元素做如下對(duì)比:共同點(diǎn):include指令元素和include動(dòng)作元素的作用都是實(shí)現(xiàn)包含文件代碼的復(fù)用。區(qū)別:對(duì)包含文件的處理方式和處理時(shí)間不同。include指令元素是在翻譯階段就引入所包含的文件,被處理的文件在邏輯和語(yǔ)法上依賴于當(dāng)前JSP頁(yè)面,其優(yōu)點(diǎn)是頁(yè)面的執(zhí)行速度快。include動(dòng)作元素是在JSP頁(yè)面運(yùn)行時(shí)才引入包含文件所產(chǎn)生的應(yīng)答文本,被包含的文件在邏輯和語(yǔ)法上獨(dú)立于當(dāng)前JSP頁(yè)面,其優(yōu)點(diǎn)是可以使用param子元素更加靈活地處理所需要的文件,缺點(diǎn)是執(zhí)行速度要慢一些。include指令元素與include動(dòng)作元素<jsp:forward>用于引導(dǎo)客戶端的請(qǐng)求到另一個(gè)頁(yè)面或者另一個(gè)Servlet。<jsp:forward>動(dòng)作可以包含一個(gè)或幾個(gè)<jsp:param>子動(dòng)作,用于向所轉(zhuǎn)向的頁(yè)面?zhèn)鬟f參數(shù)。語(yǔ)法或其中:page指定轉(zhuǎn)發(fā)請(qǐng)求的相對(duì)地址;<jsp:param>中的name指定向轉(zhuǎn)向頁(yè)面?zhèn)鬟f的參數(shù)名稱;<jsp:param>中的value指定向轉(zhuǎn)向頁(yè)面?zhèn)鬟f的參數(shù)名稱對(duì)應(yīng)的值;<jsp:forward><jsp:forwardpage="relativeURLSpec"/><jsp:forwardpage="relativeURLSpec"> <jsp:paramname="name"value="value"/>

</jsp:forward>【示例】forward動(dòng)作注意:<jsp:forward>的功能和Servlet的RequestDispatcher對(duì)象的forward方法類似,調(diào)用者和被調(diào)用者共享同一個(gè)request對(duì)象。<jsp:forward><jsp:forwardpage="second.jsp"> <jsp:paramname="step"value="1"/></jsp:forward><jsp:useBean>是JSP中一個(gè)非常重要的動(dòng)作,使用這個(gè)動(dòng)作,JSP可以動(dòng)態(tài)使用JavaBean組件來(lái)擴(kuò)充JSP的功能,由于JavaBean在開(kāi)發(fā)上以及<jsp:useBean>在使用上簡(jiǎn)單明了,使得JSP與其它動(dòng)態(tài)網(wǎng)頁(yè)開(kāi)發(fā)技術(shù)有了本質(zhì)的區(qū)別。語(yǔ)法或其中:id指定該JavaBean實(shí)例的變量名,通過(guò)id可以訪問(wèn)這個(gè)實(shí)例;class指定JavaBean的類名。容器根據(jù)class指定的類調(diào)用其構(gòu)造方法來(lái)創(chuàng)建這個(gè)類的實(shí)例;scope指定JavaBean的作用范圍,可以使用page、request、session和application。默認(rèn)值為page。type指定JavaBean對(duì)象的類型,通常在查找已存在的JavaBean時(shí)使用,這時(shí)使用type將不會(huì)產(chǎn)生新的對(duì)象。<jsp:useBean><jsp:useBeanid="name"class="className"scope="page|request|session|application"/><jsp:useBeanid="name"type="typeName"scope="page|request|session|application"/><jsp:setProperty>動(dòng)作用于向一個(gè)JavaBean的屬性賦值,需要和<jsp:useBean>動(dòng)作一起使用。語(yǔ)法或其中:name指定JavaBean對(duì)象名,與useBean動(dòng)作中的id相對(duì)應(yīng);property指定JavaBean中需要賦值的屬性名;value指定要為屬性設(shè)置的值;param指定請(qǐng)求中的參數(shù)名(如表單傳值或URL傳值),并將該參數(shù)的值賦給property所指定的屬性。<jsp:setProperty><jsp:setPropertyname="beanName"property="propertyName"value="p

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論