




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第三章第三章JSP語(yǔ)法語(yǔ)法主講教師:姚俊兵第三章第三章JSP語(yǔ)法語(yǔ)法l什么是JSP?JSP頁(yè)面HTML,SERVLET,JSP的用例對(duì)比JSP還是Servlet ?lJSP的架構(gòu)模型Model 1,JSP 1層架構(gòu)Model 2,JSP 2層架構(gòu)lJSP語(yǔ)法元素JSP語(yǔ)法元素JSP標(biāo)簽類(lèi)型l使用JSP重用Web組件 lJSP頁(yè)面一個(gè)JSP頁(yè)面就是指的包含Java代碼和HTML標(biāo)簽的web頁(yè)面 同時(shí)它也是一個(gè)服務(wù)器包含的技術(shù),單純的HTML頁(yè)面只是把標(biāo)簽靜態(tài)的渲染到瀏覽器,而JSP中的Java代碼由服務(wù)器處理產(chǎn)生單純的HTML文本數(shù)據(jù)而發(fā)送到客戶(hù)端 JSP規(guī)范列出了JSP頁(yè)面中使用到語(yǔ)法及各種語(yǔ)
2、義元素,這些元素就是JSP標(biāo)簽一個(gè)JSP頁(yè)面就是一個(gè)混合了動(dòng)態(tài)JSP標(biāo)簽和靜態(tài)HTML標(biāo)簽的HTML模板。在運(yùn)行時(shí),模板被用來(lái)生成單純的HTML頁(yè)面,發(fā)送到客戶(hù)端 l什么是JSP?第三章第三章JSP語(yǔ)法語(yǔ)法lHTML,SERVLET,JSP的用例對(duì)比使用HTML,SERVLET,JSP三種技術(shù)來(lái)比較用Hello來(lái)向訪問(wèn)者打招呼的例子Hello User l什么是JSP?第三章第三章JSP語(yǔ)法語(yǔ)法lJSP還是Servlet ?Q1:JSP在第一次運(yùn)行時(shí),會(huì)被容器翻譯成相應(yīng)的servlet,這會(huì)不會(huì)造成JSP速度比servlet 運(yùn)行慢?Q2:而在編寫(xiě)頁(yè)面時(shí),JSP卻比 servlet省事的多,是
3、不是 servlet 就不適合WEB編程呢? 首先,JSP是存在第一次執(zhí)行速度慢的問(wèn)題,但是執(zhí)行完第一次后,跟servlet 就沒(méi)有不同 其次,servlet 編寫(xiě)一個(gè)簡(jiǎn)單的頁(yè)面就得 out.print N次,的確繁瑣,但不代表不適合WEB編程,它可以很方便的處理業(yè)務(wù)邏輯,比如,addUser到數(shù)據(jù)庫(kù),標(biāo)準(zhǔn)的java代碼結(jié)論,在一個(gè)WEB系統(tǒng)中,通常是servlet 和JSP的結(jié)合使用 l結(jié)合要點(diǎn)結(jié)合要點(diǎn):JSP頁(yè)面是用來(lái)可視化展現(xiàn)的,比如,操縱頁(yè)面頁(yè)面是用來(lái)可視化展現(xiàn)的,比如,操縱頁(yè)面 業(yè)務(wù)邏輯處理卻是業(yè)務(wù)邏輯處理卻是servlet的強(qiáng)項(xiàng)的強(qiáng)項(xiàng)JSP Model 2的基礎(chǔ) l什么是JSP?第
4、三章第三章JSP語(yǔ)法語(yǔ)法lJSP的架構(gòu)模型l什么是JSP?第三章第三章JSP語(yǔ)法語(yǔ)法Model 1,JSP 1層架構(gòu)Model 2,JSP 2層架構(gòu)第三章第三章JSP語(yǔ)法語(yǔ)法lJSP語(yǔ)法元素及標(biāo)簽類(lèi)型l什么是JSP?元素類(lèi)別所含元素JSP 標(biāo)簽類(lèi)型簡(jiǎn)短描述標(biāo)簽語(yǔ)法Directives指令集pageincludetaglibDirective指定JSP引擎翻譯時(shí)的指令Declarations聲明Java變量,方法的聲明定義Declaration聲明和定義方法和變量Scriptlets腳本ConditionalIterationScriptlet允許開(kāi)發(fā)者在JSP頁(yè)面中自由編寫(xiě)Java代碼Expr
5、essions表達(dá)式Expression作為JSP頁(yè)面輸出HTML代碼的便捷方式Actions動(dòng)作jsp:includejsp:forwardjsp:useBeanjsp:setPropertyjsp:getPropertyjsp:pluginAction向JSP引擎發(fā)出提供請(qǐng)求時(shí)的指令Comments注釋Comment用于文檔和注釋JSP代碼XML-based syntaxXML格式的JSP語(yǔ)法count+; lJSP語(yǔ)法元素及標(biāo)簽類(lèi)型案例l什么是JSP?第三章第三章JSP語(yǔ)法語(yǔ)法lJSP指令-directivespage 指令:page指令通知JSP引擎證實(shí)關(guān)于JSP頁(yè)面的所有屬性。這個(gè)指
6、令并不僅僅應(yīng)用在聲明它的頁(yè)面,而是作用于整個(gè)翻譯單元。include 指令:include指令告訴JSP引擎在當(dāng)前頁(yè)面包含其它web組件(HTML,JSP等)。taglib 指令用來(lái)關(guān)聯(lián)一個(gè)已知的taglib配置文件的前綴。 l什么是JSP?第三章第三章JSP語(yǔ)法語(yǔ)法lJSP頁(yè)面之page指令l什么是JSP?第三章第三章JSP語(yǔ)法語(yǔ)法lJSP頁(yè)面之page指令import 屬性l書(shū)寫(xiě)格式(2種)l隱含導(dǎo)入的包,也就是不必再顯式導(dǎo)入的包l注意點(diǎn)可以出現(xiàn)多次import屬性,這個(gè)是page指令中的唯一特例重復(fù)導(dǎo)入的包會(huì)被忽略l什么是JSP?第三章第三章JSP語(yǔ)法語(yǔ)法java.lang.*, jav
7、ax.servlet.*, javax.servlet.jsp.*, javax.servlet.http.*12l什么是JSP?第三章第三章JSP語(yǔ)法語(yǔ)法lJSP頁(yè)面之page指令errorPage和isErrorPage屬性lJSP頁(yè)面處理異常的機(jī)制普通的try-catch塊使用errorPage和isErrorPage屬性errorPage也可以是error.htm,但是無(wú)法處理出錯(cuò)信息而已l什么是JSP?第三章第三章JSP語(yǔ)法語(yǔ)法lJSP頁(yè)面之page指令language、extends和info屬性l說(shuō)明頁(yè)面上的聲明,腳本和表達(dá)式用的語(yǔ)言,只有java可用lextends屬性指定頁(yè)面
8、生成的servlet的父類(lèi)用來(lái)定制容器生成的JSP對(duì)應(yīng)的servlet類(lèi)的特性該屬性基本上用不到linfo屬性,info屬性允許我們?yōu)樯傻膕ervlet的getServletInfo()方法返回的字符串。l什么是JSP?第三章第三章JSP語(yǔ)法語(yǔ)法lJSP頁(yè)面之page指令buffer和autoFlush屬性lbuffer屬性,buffer屬性指明在生成的內(nèi)容發(fā)送到客戶(hù)端前的輸出緩沖區(qū)的最小值,JSP規(guī)范指定最小為8kb(只能是kb后綴),如果不用緩沖而直接發(fā)送數(shù)據(jù)到客戶(hù)端,可設(shè)置為 none。lautoFlush屬性,autoFlush屬性指明一旦緩沖區(qū)滿(mǎn)緩沖區(qū)的數(shù)據(jù)是否自動(dòng)發(fā)送到客戶(hù)端。默
9、認(rèn)值是true。如果設(shè)為false,一時(shí)緩沖區(qū)滿(mǎn),再向緩沖區(qū)輸出數(shù)據(jù)就會(huì)報(bào)出異常。l下列組合就是非法的:翻譯成servlet時(shí)出錯(cuò) 運(yùn)行時(shí)出錯(cuò) l什么是JSP?第三章第三章JSP語(yǔ)法語(yǔ)法lJSP頁(yè)面之page指令contentType和pageEncoding屬性 lcontentType屬性指明輸出的MIME類(lèi)型和字符編碼MIME的默認(rèn)值為text/html;字符編碼的默認(rèn)值為ISO-8859-1。MIME和字符編碼之間用分號(hào);隔開(kāi) 等價(jià)于在servlet中寫(xiě):response.setContentType(text/html;charset=ISO-8859-1);lpageEncodin
10、g屬性指明JSP頁(yè)面所使用的編碼。默認(rèn)值為ISO-8859-1。中文編碼:gb2312,gbklJSP語(yǔ)法元素:Declarations (聲明)聲明就是在JSP頁(yè)面中聲明和定義變量和方法。聲明總是以結(jié)尾。 l什么是JSP?第三章第三章JSP語(yǔ)法語(yǔ)法 定義一個(gè)count變量,并賦初值0。聲明:變量?jī)H在JSP引擎第一次裝載頁(yè)面的時(shí)候初始化一次(僅一次),而在接下來(lái)的客戶(hù)端請(qǐng)求中使用該變量的值。兩種使用方式等價(jià)lJSP語(yǔ)法元素:Scriptlets (腳本)腳本就是嵌套在JSP頁(yè)面中的Java代碼片段。總是以結(jié)尾。也得是Java合法語(yǔ)句l什么是JSP?第三章第三章JSP語(yǔ)法語(yǔ)法 腳本每次頁(yè)面訪問(wèn)都
11、會(huì)執(zhí)行一次,所以count變量每請(qǐng)求一次就會(huì)增一% out.print(); count+; out.print(Welcome! You are visitor number + count); out.print();%腳本主要用來(lái)嵌套JSP頁(yè)面的業(yè)務(wù)邏輯,當(dāng)然也可以使用腳本來(lái)輸出HTML語(yǔ)句 lJSP語(yǔ)法元素:Expressions (表達(dá)式)表達(dá)式就是Java語(yǔ)言中的表達(dá)式,表達(dá)式也是每次頁(yè)面訪問(wèn)都執(zhí)行一次,它的值就被嵌套在輸出的HTML語(yǔ)句中。總是以結(jié)尾l什么是JSP?第三章第三章JSP語(yǔ)法語(yǔ)法比如: Welcome! You are visitor number 使用表達(dá)式,可以輸
12、出任何對(duì)象或者任何基本數(shù)據(jù)類(lèi)型(int, boolean, char等)到輸出流。當(dāng)然也可以打印任何數(shù)學(xué)運(yùn)算結(jié)果或者布爾表達(dá)式或者調(diào)用方法的返回值第三章第三章JSP語(yǔ)法語(yǔ)法lJSP語(yǔ)法元素:Expressions (表達(dá)式)合法的合法的JSP表達(dá)式表達(dá)式表達(dá)式解釋說(shuō)明輸出一個(gè)整數(shù)一個(gè)數(shù)學(xué)表達(dá)式一個(gè)布爾變量一個(gè)布爾值一個(gè)布爾表達(dá)式一個(gè)返回char類(lèi)型的方法調(diào)用一個(gè)返回double值的方法一個(gè)指向一個(gè)Vector對(duì)象的引用變量返回一個(gè)float值的方法返回一個(gè)float值的方法返回一個(gè)String對(duì)象的方法l什么是JSP?針對(duì)如下聲明片段,分析一下合法及不合法的表達(dá)式使用 非法的非法的JSP表達(dá)式
13、表達(dá)式表達(dá)式解釋說(shuō)明表達(dá)式中不能使用分號(hào);%= int i = 20 %表達(dá)式中不能出現(xiàn)任何定義方法沒(méi)有任何返回值,返回類(lèi)型是void第三章第三章JSP語(yǔ)法語(yǔ)法lJSP語(yǔ)法元素:Actions (動(dòng)作)動(dòng)作是對(duì)JSP引擎發(fā)出的命令。它們指明引擎在執(zhí)行頁(yè)面時(shí)執(zhí)行特定的任務(wù)。比如,下面的代碼命令引擎在當(dāng)前輸出的JSP頁(yè)面中包含另外一個(gè)JSP頁(yè)面,copyright.jsp的輸出內(nèi)容。l什么是JSP? jsp:include jsp:forward jsp:useBean jsp:setProperty jsp:getProperty jsp:plugin 標(biāo)準(zhǔn)的JSP動(dòng)作共6個(gè)頭兩個(gè)動(dòng)作,jsp:
14、include和jsp:forward,使得JSP頁(yè)面能夠重用其它的web組件,參考重用web組件部分。接下來(lái)的三個(gè),jsp:useBean, jsp:setProperty和jsp:getProperty用于JSP頁(yè)面的JavaBeans,參考使用JavaBeans部分最后一個(gè)動(dòng)作,jsp:plugin指明JSP引擎對(duì)于嵌套的客戶(hù)端組件,如applets生成合適的HTML代碼。除了這6個(gè)標(biāo)準(zhǔn)的動(dòng)作,JSP頁(yè)面還可以使用用戶(hù)自定義的動(dòng)作,也就是自定義標(biāo)簽(custom tags也就是自定義動(dòng)作custom actions)。參考自定義標(biāo)簽部分 第三章第三章JSP語(yǔ)法語(yǔ)法lJSP語(yǔ)法元素:Com
15、ments (注釋)注釋從不會(huì)影響JSP頁(yè)面的輸出,但對(duì)于文檔卻是非常有幫助的。l什么是JSP?標(biāo)準(zhǔn)的JSP動(dòng)作共6個(gè)語(yǔ)法如下:幾種注釋語(yǔ)句Welcome!不會(huì)輸出到產(chǎn)生的HTML頁(yè)面, 也不會(huì)生成到servlet不會(huì)輸出到產(chǎn)生的HTML頁(yè)面,到servlet輸出到產(chǎn)生的HTML頁(yè)面,到servlet第三章第三章JSP語(yǔ)法語(yǔ)法lJSP頁(yè)面就是頁(yè)面就是servlets 盡管JSP頁(yè)面看上去更像HTML頁(yè)面,但它實(shí)際上卻是可執(zhí)行的servlet。JSP引擎語(yǔ)法分析JSP文件,創(chuàng)建相應(yīng)的Java文件。該文件根據(jù)JSP文件的相應(yīng)元素聲明于之對(duì)應(yīng)各成員的映射servlet類(lèi)。JSP引擎編譯這個(gè)類(lèi),把它載
16、入內(nèi)存,接著就以可執(zhí)行的servlet來(lái)運(yùn)行,隨之把servlet的輸出發(fā)送到客戶(hù)端 lJSP頁(yè)面生命周期頁(yè)面生命周期第三章第三章JSP語(yǔ)法語(yǔ)法l理解翻譯單元理解翻譯單元 翻譯單元示意圖翻譯單元示意圖lJSP頁(yè)面生命周期頁(yè)面生命周期第三章第三章JSP語(yǔ)法語(yǔ)法l理解翻譯單元理解翻譯單元 概念及要點(diǎn)概念及要點(diǎn)lJSP頁(yè)面生命周期頁(yè)面生命周期概念:就像HTML可以包含其它HTML頁(yè)面(比如,使用框架frames),JSP頁(yè)面也可以包含其它JSP頁(yè)面的內(nèi)容和靜態(tài)HTML頁(yè)面。這可由include指令完成。需要記住的最重要一點(diǎn)就是,在此時(shí)JSP引擎為JSP頁(yè)面生成Java代碼,同時(shí)也把包含的頁(yè)面內(nèi)容插入
17、到生成的servlet類(lèi)中。用于翻譯到單一servlet類(lèi)的一系列頁(yè)面就稱(chēng)為一個(gè)翻譯單元 對(duì)于翻譯單元要時(shí)刻記住的幾點(diǎn):page指令,即頁(yè)面指令會(huì)影響整個(gè)翻譯單元在同一個(gè)翻譯單元中一個(gè)變量的聲明不能出現(xiàn)多次。比如,我們不能在使用include指令被包含的頁(yè)面中定義一個(gè)已經(jīng)在包含頁(yè)面中定義過(guò)的變量,因?yàn)檫@兩個(gè)頁(yè)面屬于同一個(gè)翻譯單元標(biāo)準(zhǔn)的動(dòng)作不能在同一個(gè)翻譯單元中定義同一個(gè)bean多次。參考使用JavaBeans部分 第三章第三章JSP語(yǔ)法語(yǔ)法lJSP生命周期各階段生命周期各階段lJSP頁(yè)面生命周期頁(yè)面生命周期階段描述工作內(nèi)容Page translation 頁(yè)面翻譯分析頁(yè)面,生成相應(yīng)的servl
18、etJava文件讀取JSP頁(yè)面,分析,驗(yàn)證使用tag的語(yǔ)法,還要驗(yàn)證的工作:l指令集和標(biāo)準(zhǔn)動(dòng)作的屬性值對(duì)的合法性l同一個(gè)JavaBean名稱(chēng)在同一個(gè)翻譯單元中不能超過(guò)一次l如果使用自定義標(biāo)簽庫(kù),確保該庫(kù)是合法的l自定義標(biāo)簽的使用是有效的Page compilation頁(yè)面編譯編譯生成的Java文件校驗(yàn)JSP頁(yè)面中使用的Java代碼的合法性Load class裝載類(lèi)裝載編譯好的類(lèi)文件跟servlet的生命周期過(guò)程非常類(lèi)似,只不過(guò)jsp生成的servlet有其自己的業(yè)務(wù)方法來(lái)對(duì)應(yīng),比如:_jspService()方法對(duì)應(yīng)service()方法Create instance創(chuàng)建類(lèi)實(shí)例Servlet類(lèi)
19、實(shí)例被創(chuàng)建Call jspInit()調(diào)用jspInit()方法這個(gè)方法會(huì)在其它任何方法可初始化前調(diào)用Call _jspService()調(diào)用_jspService()方法每個(gè)請(qǐng)求都會(huì)調(diào)用這個(gè)方法Call jspDestroy()調(diào)用jspDestroy()方法這個(gè)方法在servlet容器不再使用該servlet服務(wù)時(shí)調(diào)用第三章第三章JSP語(yǔ)法語(yǔ)法lJSP生命周期示例生命周期示例lJSP頁(yè)面生命周期頁(yè)面生命周期翻譯后的servlet文件第三章第三章JSP語(yǔ)法語(yǔ)法l理解翻譯過(guò)程理解翻譯過(guò)程 JSP引擎分析翻譯JSP元素為servlet代碼所遵循的規(guī)則: lJSP頁(yè)面生命周期頁(yè)面生命周期1、JSP
20、引擎在翻譯階段使用一些指令集來(lái)產(chǎn)生Java代碼。 比如,在生成的servlet類(lèi)中,page指令的import屬性就是用來(lái)幫助生成import語(yǔ)句,而info屬性幫助實(shí)現(xiàn)getServletInfo()方法。一些屬性?xún)H用來(lái)對(duì)引擎指明頁(yè)面的全局屬性;如,language 指明引擎使用Java作為腳本語(yǔ)言,pageEncoding屬性指明引擎當(dāng)前頁(yè)面的字符編碼。2、所有JSP聲明都將成為產(chǎn)生的servlet類(lèi)的一部分代碼。 它們只是從頁(yè)面照搬到servlet類(lèi)。因此,JSP中聲明的變量成為servlet類(lèi)中的實(shí)例變量,JSP中聲明的方式就成為了servlet類(lèi)中的實(shí)例方法。3、所有JSP腳本都成為
21、生成servlet類(lèi)中的_jspService()方法的一部分代碼。 它們也只是照搬而已。因此,腳本中聲明的變量成為_(kāi)jspService方法的局部變量。腳本中是不允許定義方法的,對(duì)吧,在Java編程中無(wú)法在方法里面再嵌套方法。4、所有JSP表達(dá)式都成為生成servlet類(lèi)中的_jspService()方法的一部分代碼。 它們被out.print()方法使用。5、所有JSP動(dòng)作被供應(yīng)商提供的相應(yīng)類(lèi)代替。6、所有JSP注釋被忽略。7、任何其它文本都成為生成servlet類(lèi)中的_jspService()方法的一部分代碼。它們被out.write()方法使用。這樣的文本也叫模板文本。 會(huì)導(dǎo)致編譯失敗
22、http:/localhost:8080/counter/counter.jsp?jsp_precompile=true(預(yù)編譯預(yù)編譯jsp)第三章第三章JSP語(yǔ)法語(yǔ)法l理解翻譯過(guò)程理解翻譯過(guò)程 之 遵循規(guī)則的影響一lJSP頁(yè)面生命周期頁(yè)面生命周期使用腳本元素 腳本元素,由于聲明,腳本,表達(dá)式都允許在JSP頁(yè)面中編寫(xiě)腳本式語(yǔ)言代碼,被統(tǒng)稱(chēng)為腳本元素。使用Java語(yǔ)言作為腳本語(yǔ)言,結(jié)果呢,腳本元素的代碼行為要遵循Java編程語(yǔ)言編譯時(shí)期和運(yùn)行時(shí)期的規(guī)范。 聲明的順序 Java類(lèi)中的聲明順序是可以隨意的,由此JSP頁(yè)面聲明中的變量和方法的順序也是無(wú)關(guān)的。 第三章第三章JSP語(yǔ)法語(yǔ)法l理解翻譯過(guò)程理
23、解翻譯過(guò)程 之 遵循規(guī)則的影響二lJSP頁(yè)面生命周期頁(yè)面生命周期腳本代碼的順序 由于腳本成為生成servlet類(lèi)的_jspService()方法中的一部分,所有的腳本變量都成為該方法的局部變量,這樣它們出現(xiàn)的順序就變得極為重要。 變量初始化:Java中實(shí)例變量會(huì)被自動(dòng)初始化為默認(rèn)值,而局部變量在使用前必須顯示初始化才可。同樣的JSP中的聲明變量會(huì)被初始化為默認(rèn)值,而JSP腳本聲明的變量在它們使用前必須被顯示的初始化。正確寫(xiě)法:第三章第三章JSP語(yǔ)法語(yǔ)法l理解翻譯過(guò)程理解翻譯過(guò)程 之 遵循規(guī)則的影響三lJSP頁(yè)面生命周期頁(yè)面生命周期使用條件和循環(huán)語(yǔ)句一 腳本就是用來(lái)處理業(yè)務(wù)邏輯,最常用的邏輯無(wú)非
24、條件語(yǔ)句和循環(huán)語(yǔ)句。與之相對(duì)應(yīng)的JSP和HTML混合代碼 第三章第三章JSP語(yǔ)法語(yǔ)法l理解翻譯過(guò)程理解翻譯過(guò)程 之 遵循規(guī)則的影響三lJSP頁(yè)面生命周期頁(yè)面生命周期使用條件和循環(huán)語(yǔ)句二 腳本就是用來(lái)處理業(yè)務(wù)邏輯,最常用的邏輯無(wú)非條件語(yǔ)句和循環(huán)語(yǔ)句。容易犯的錯(cuò)誤翻譯后正確寫(xiě)法 循環(huán)語(yǔ)句第三章第三章JSP語(yǔ)法語(yǔ)法l理解翻譯過(guò)程理解翻譯過(guò)程 之 遵循規(guī)則的影響四lJSP頁(yè)面生命周期頁(yè)面生命周期使用請(qǐng)求時(shí)屬性表達(dá)式 用于這種方式傳值給動(dòng)作屬性的表達(dá)式,稱(chēng)為請(qǐng)求時(shí)屬性表達(dá)式。jsp:include page= /在這種情況下,表達(dá)式不再輸出,而是在請(qǐng)求時(shí)把值傳到j(luò)sp:include動(dòng)作的page屬性中
25、。% page buffer= % include file= %必須牢記的是: 這種請(qǐng)求時(shí)提供值的機(jī)制不能套用到指令集。 為什么呢?指令集只有翻譯時(shí)的語(yǔ)義,這也就意味著JSP引擎只有在頁(yè)面翻譯時(shí)用得到指令集。所以下面是非法的使用:第三章第三章JSP語(yǔ)法語(yǔ)法l理解翻譯過(guò)程理解翻譯過(guò)程 之 遵循規(guī)則的影響五使用轉(zhuǎn)義字符序列正如其它任何編程語(yǔ)言,JSP腳本語(yǔ)言也有一些用于JSP引擎分析的關(guān)鍵字符。這些字符包括:?jiǎn)我?hào),雙引號(hào),反斜杠,還有字符序列%, %!, %= , , 。如果需要把這些字符當(dāng)作普通字符來(lái)使用,需要在其前面加上反斜杠,以便告訴分析器不是特殊字符。分幾種情況:l在模板文本中l(wèi)在腳本
26、元素中 l在屬性中 l不被瀏覽器正確解釋的標(biāo)簽,可以使用其ascii碼 lJSP頁(yè)面生命周期頁(yè)面生命周期第三章第三章JSP語(yǔ)法語(yǔ)法l理解翻譯過(guò)程理解翻譯過(guò)程 之 遵循規(guī)則的影響五使用轉(zhuǎn)義字符序列在模板文本中JSP中所有的腳本元素都是以%字符作為標(biāo)簽開(kāi)始的聲明(%!),腳本(%)和表達(dá)式(%=),JSP分析器就會(huì)尋找字符序列%作為JSP標(biāo)簽的開(kāi)始,所以,在文本中使用%就得使用反斜杠()來(lái)避免與字符%關(guān)鍵字符沖突。lJSP頁(yè)面生命周期頁(yè)面生命周期The opening tag of a scriptlet is 既然是文本了,JSP引擎還會(huì)分析%嗎? 當(dāng)然不會(huì)。Out.write()出來(lái) 第三章第
27、三章JSP語(yǔ)法語(yǔ)法l理解翻譯過(guò)程理解翻譯過(guò)程 之 遵循規(guī)則的影響五使用轉(zhuǎn)義字符序列在腳本元素中所有的腳本元素都必須以%標(biāo)簽結(jié)束。一旦讀到標(biāo)簽頭,分析器就會(huì)尋找%作為結(jié)束標(biāo)簽。如果想在腳本元素中顯示%就得使用來(lái)轉(zhuǎn)義 lJSP頁(yè)面生命周期頁(yè)面生命周期%= The opening tag of a scriptlet is % 同樣的%并沒(méi)有使用轉(zhuǎn)義字符,因?yàn)樗呀?jīng)在分析器的表達(dá)式中的中間了。Out.print ()出來(lái) 第三章第三章JSP語(yǔ)法語(yǔ)法l理解翻譯過(guò)程理解翻譯過(guò)程 之 遵循規(guī)則的影響五使用轉(zhuǎn)義字符序列在屬性中在屬性中使用這些關(guān)鍵字符,都得進(jìn)行轉(zhuǎn)義 lJSP頁(yè)面生命周期頁(yè)面生命周期% pag
28、e info=A sample use of , , , characters. %對(duì)于使用單引號(hào)來(lái)寫(xiě)屬性的值,則要對(duì)單引號(hào)進(jìn)行轉(zhuǎn)義% page info=A sample use of , , , characters. %X jsp:include page= /jsp:include page= / jsp:include page= / 修正為:第三章第三章JSP語(yǔ)法語(yǔ)法l理解翻譯過(guò)程理解翻譯過(guò)程 之 遵循規(guī)則的影響五使用轉(zhuǎn)義字符序列不被瀏覽器正確解釋的標(biāo)簽,可以使用其ascii碼 不被瀏覽器正確解釋的標(biāo)簽,可以使用其ascii碼 ,同樣可以進(jìn)行轉(zhuǎn)義 ,對(duì)于任何一個(gè)關(guān)鍵字符都適用。lJ
29、SP頁(yè)面生命周期頁(yè)面生命周期The opening tag of a scriptlet is <%The closing tag of a scriptlet is %>同樣也可以避免與關(guān)鍵字符(任何)的沖突 第三章第三章JSP語(yǔ)法語(yǔ)法l使用JSP重用Web組件 在JSP的世界中,重用web組件無(wú)非就是包含內(nèi)容或者在JSP頁(yè)面中輸出另外一個(gè)組件 靜態(tài)重用l靜態(tài)包含重用就是在JSP文件翻譯時(shí)期把另外JSP文件的web組件包含進(jìn)來(lái),生成一個(gè)servlet 類(lèi)文件。動(dòng)態(tài)重用l動(dòng)態(tài)包含重用就是在JSP頁(yè)面在請(qǐng)求時(shí)期把另外JSP頁(yè)面的web組件包含進(jìn)來(lái),輸出。l使用使用JS
30、P重用重用Web組件組件 第三章第三章JSP語(yǔ)法語(yǔ)法l靜態(tài)包含 靜態(tài)包含的語(yǔ)法: l使用使用JSP重用重用Web組件組件 第三章第三章JSP語(yǔ)法語(yǔ)法l靜態(tài)包含 從被包含的文件中訪問(wèn)變量l既然被包含的頁(yè)面代碼成為了包含頁(yè)面的一部分,所以在每個(gè)頁(yè)面中定義的變量和方法都可以被其它的頁(yè)面訪問(wèn)(如果被包含頁(yè)面和包含頁(yè)面定義了一個(gè)同名變量,翻譯就會(huì)出錯(cuò)),也可以一個(gè)頁(yè)面定義,其它頁(yè)面使用 靜態(tài)包含所造成的影響,也就是要遵守的規(guī)則l由于在翻譯時(shí)期不會(huì)處理任何業(yè)務(wù),這就意味著,file屬性的值不能是一個(gè)表達(dá)式(沒(méi)有執(zhí)行嘛,只是翻譯成java文件而已),所以下面這種使用方法是非法的。l由于請(qǐng)求參數(shù)是請(qǐng)求的一部分
31、,故在翻譯時(shí)期請(qǐng)求對(duì)請(qǐng)求參數(shù)也是一無(wú)所知的,所以file屬性的值不能傳遞任何參數(shù)到被包含的頁(yè)面。基于此,使用下面的方式也是不合法的。l被包含的文件有可能無(wú)法被單獨(dú)編譯通過(guò)(被包含的文件或者包含的文件里面定義變量,而另外一方使用變量而不需要再定義)。當(dāng)然,避免頁(yè)面之間依賴(lài)的最好方式就是使用隱含pageContext的pageContext.setAttribute()和pageContext.setAttribute()方法來(lái)共享靜態(tài)包含頁(yè)面間的對(duì)象l使用使用JSP重用重用Web組件組件 第三章第三章JSP語(yǔ)法語(yǔ)法l動(dòng)態(tài)包含 動(dòng)態(tài)包含的語(yǔ)法: 語(yǔ)法中的page屬性是必填的。它也必須是一個(gè)相對(duì)URL,它可以指向一個(gè)靜態(tài)的抑或動(dòng)態(tài)的web組件,包括可以是Servlet。也可以是一個(gè)請(qǐng)求時(shí)的表達(dá)式,比如:jsp:include page= / l使用使用JSP重用重用Web組件組件 第三章第三章JSP語(yǔ)法語(yǔ)法l動(dòng)態(tài)包含 使用 jsp:includel使用使用JSP重用重用Web組件組件 由于的語(yǔ)義和RequestDispatcher.include()方法是等價(jià)的,故
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 37 選擇性必修1 第七單元 第31講 神經(jīng)調(diào)節(jié)的結(jié)構(gòu)基礎(chǔ)及基本方式
- 06 必修1 第二單元 第6講 水進(jìn)出細(xì)胞的原理
- 勸學(xué)教學(xué)課件大學(xué)
- 房地產(chǎn)投資信托基金設(shè)立及運(yùn)營(yíng)管理合同
- 建筑材料供應(yīng)履約保證金協(xié)議
- 教育培訓(xùn)機(jī)構(gòu)部分股權(quán)收購(gòu)轉(zhuǎn)讓協(xié)議范本
- 蔡歡離婚后子女監(jiān)護(hù)權(quán)及探望權(quán)協(xié)議
- 采棉機(jī)作業(yè)與棉籽回收合同協(xié)議書(shū)
- 商標(biāo)翻譯教學(xué)課件
- 教學(xué)課件動(dòng)畫(huà)
- 2025輔警招聘考試題目及答案
- 2025年度上半年校園安全工作總結(jié)及下半年工作計(jì)劃
- 黑龍江司法警官職業(yè)學(xué)院2025年招生政治考察表
- (正式版)CB∕T 4549-2024 船舶行業(yè)企業(yè)加油-駁油作業(yè)安全管理規(guī)定
- 2023年中國(guó)建設(shè)銀行(西藏自治區(qū)分行)校園招聘模擬筆試試題及答案解析
- Going-Positive教學(xué)講解課件
- 廣州大劇院建筑分析課件
- 公司扣款單據(jù)模板
- 文獻(xiàn)檢索與閱讀方法課件
- 髂內(nèi)動(dòng)脈解剖特點(diǎn)PPT
- 螺旋槳加工與安裝工藝
評(píng)論
0/150
提交評(píng)論