《jsp培訓(xùn)課件》_第1頁(yè)
《jsp培訓(xùn)課件》_第2頁(yè)
《jsp培訓(xùn)課件》_第3頁(yè)
《jsp培訓(xùn)課件》_第4頁(yè)
《jsp培訓(xùn)課件》_第5頁(yè)
已閱讀5頁(yè),還剩36頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、JavaWEBJavaWEB開發(fā)開發(fā)-JSP-JSPJSPJSP入門入門 建立對(duì)JSP的直觀認(rèn)識(shí) JSP的運(yùn)行原理 分析JSP所生成的Servlet代碼 JSP隱式對(duì)象 注冊(cè)與配置jsp頁(yè)面的訪問路徑 JSP與JavaScript的綜合應(yīng)用 JSP與Servlet的應(yīng)用比較 JSP起源 在很多動(dòng)態(tài)網(wǎng)頁(yè)中,絕大部分內(nèi)容都是固定不變的,只有局部?jī)?nèi)容需要?jiǎng)討B(tài)產(chǎn)生和改變。 如果使用Servlet程序來(lái)輸出只有局部?jī)?nèi)容需要?jiǎng)討B(tài)改變的網(wǎng)頁(yè),其中所有的靜態(tài)內(nèi)容也需要程序員用Java程序代碼產(chǎn)生,整個(gè)Servlet程序的代碼將非常臃腫,編寫和維護(hù)都將非常困難。 對(duì)大量靜態(tài)內(nèi)容的美工設(shè)計(jì)和相關(guān)HTML語(yǔ)句的編寫

2、,并不是程序員所要做的工作,程序員對(duì)此也不一定在行。網(wǎng)頁(yè)美工設(shè)計(jì)和制作人員不懂Java編程,更是無(wú)法來(lái)完成這樣的工作。 為了彌補(bǔ)Servlet的缺陷,SUN公司在在ServletServlet的基礎(chǔ)上的基礎(chǔ)上推出了JSP(Java Server Pages)技術(shù)作為解決方案。 JSP是簡(jiǎn)化Servlet編寫的一種技術(shù),它將Java代碼和HTML語(yǔ)句混合在同一個(gè)文件中編寫,只對(duì)網(wǎng)頁(yè)中的要?jiǎng)討B(tài)產(chǎn)生的內(nèi)容采用Java代碼來(lái)編寫,而對(duì)固定不變的靜態(tài)內(nèi)容采用普通靜態(tài)HTML頁(yè)面的方式編寫。 建立對(duì)JSP的直觀認(rèn)識(shí) JSP頁(yè)面是由HTML語(yǔ)句和嵌套在其中的Java代碼組成的一個(gè)普通文本文件,JSP 頁(yè)面的

3、文件擴(kuò)展名必須為.jsp。在JSP頁(yè)面中編寫的Java代碼需要嵌套在中,嵌套在之間的Java代碼被稱之為腳本片段腳本片段(Scriptlets),沒有嵌套在之間的內(nèi)容被稱之為JSP的模版元素模版元素。JSP中的Java代碼可以使用語(yǔ)句將其他Java程序代碼產(chǎn)生的結(jié)果字符串輸出給客戶端,也可以使用語(yǔ)句將它們打印到命令行窗口。 JSP文件就像普通的HTML文件一樣,它們可以放置在可以放置在WEBWEB應(yīng)用程序中的除應(yīng)用程序中的除了了WEB-INFWEB-INF及其子目錄外的其他任何目錄中,及其子目錄外的其他任何目錄中,JSPJSP頁(yè)面的訪問路徑與普通頁(yè)面的訪問路徑與普通HTMLHTML頁(yè)面的訪問路

4、徑形式也完全一樣。頁(yè)面的訪問路徑形式也完全一樣。在JSP頁(yè)面中也可以使用一種稱之為JSPJSP表達(dá)式表達(dá)式的元素,只需將要輸出的變量或表達(dá)式直接封裝在之中,就可以向客戶端輸出這個(gè)變量或表達(dá)式的運(yùn)算結(jié)果。在在JSPJSP表達(dá)式中嵌套的變量或表達(dá)式后面不能有分號(hào)。表達(dá)式中嵌套的變量或表達(dá)式后面不能有分號(hào)。 JSPJSP的運(yùn)行原理的運(yùn)行原理 WEB容器(Servlet引擎)接收到以.jsp為擴(kuò)展名的URL的訪問請(qǐng)求時(shí),它將把該訪問請(qǐng)求交給JSPJSP引擎引擎去處理。每個(gè)JSP 頁(yè)面在第一次被訪問時(shí),JSP引擎將它翻譯成一個(gè)Servlet源程序,接著再把這個(gè)Servlet源程序編譯成Servlet的c

5、lass類文件,然后再由WEBWEB容器(容器(ServletServlet引擎)引擎)像調(diào)用普通Servlet程序一樣的方式來(lái)裝載和解釋執(zhí)行這個(gè)由JSP頁(yè)面翻譯成的Servlet程序。 JSP規(guī)范也沒有明確要求JSP中的腳本程序代碼必須采用Java語(yǔ)言,JSP中的腳本程序代碼可以采用Java語(yǔ)言之外的其他腳本語(yǔ)言來(lái)編寫,但是,JSP頁(yè)面最終必須轉(zhuǎn)換成Java Servlet程序。 可以在WEB應(yīng)用程序正式發(fā)布之前,將其中的所有JSP頁(yè)面預(yù)先編譯成Servlet程序。JSPJSP隱式對(duì)象隱式對(duì)象 public void _jspService(HttpServletRequest reques

6、trequest,HttpServletResponse responseresponse)throws java.io.IOException, ServletExceptionJspFactory _jspxFactory = null;PageContext pageContextpageContext = null;HttpSession sessionsession = null;ServletContext applicationapplication = null;ServletConfig configconfig = null;JspWriter outout = null;

7、Object pagepage = this;.Throwable exceptionexception = org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request);if (exception != null) response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);注冊(cè)與配置注冊(cè)與配置JSPJSP頁(yè)面的訪問路徑頁(yè)面的訪問路徑 SimpleJspServlet/jsp/simple.jsp1SimpleJspServlet/xxx/yyy.htm

8、lJSPJSP與與ServletServlet的應(yīng)用比較的應(yīng)用比較 JSP是一種以產(chǎn)生網(wǎng)頁(yè)顯示內(nèi)容為中心的網(wǎng)頁(yè)顯示內(nèi)容為中心的WEBWEB開發(fā)技術(shù)開發(fā)技術(shù),它可以直接使用模版元素來(lái)產(chǎn)生網(wǎng)頁(yè)文檔的內(nèi)容。 JSP頁(yè)面的源文件要比Servlet源文件簡(jiǎn)單,并且JSP頁(yè)面的開發(fā)過程要比Servlet的開發(fā)過程簡(jiǎn)單得多。JSP引擎可以對(duì)JSP頁(yè)面的修改進(jìn)行檢測(cè),并自動(dòng)重新翻譯和編譯修改過的JSP文件。JSP技術(shù)是建立在Servlet技術(shù)基礎(chǔ)之上的,所有的JSP頁(yè)面最終都要被轉(zhuǎn)換成Servlet來(lái)運(yùn)行。 在大型WEB應(yīng)用程序的開發(fā)中,Servlet與JSP經(jīng)常要混合使用,各司其職,Servlet通常用作控

9、制組件,并處理一些復(fù)雜的后臺(tái)業(yè)務(wù),JSP則作為顯示組件。一次響應(yīng)過程可以劃分成幾個(gè)功能模塊來(lái)協(xié)同完成,首先由Servlet完成流程控制和業(yè)務(wù)處理,并將結(jié)果數(shù)據(jù)存儲(chǔ)在request或session域中,然后將請(qǐng)求轉(zhuǎn)發(fā)(forward)到JSP頁(yè)面,再由JSP頁(yè)面從request或session域中取出結(jié)果數(shù)據(jù)并完成響應(yīng)內(nèi)容的輸出。通過這種方式實(shí)現(xiàn)業(yè)務(wù)邏輯與顯示內(nèi)容的分離,從而將應(yīng)用程序開發(fā)者和網(wǎng)頁(yè)作者的工作分離。 JSPJSP基本語(yǔ)法基本語(yǔ)法 JSP模版元素 JSP表達(dá)式 JSP腳本片斷 EL表達(dá)式 JSP注釋 特殊字符序列的轉(zhuǎn)義處理 如何查找JSP頁(yè)面中的錯(cuò)誤 JSPJSP模版元素模版元素 J

10、SP頁(yè)面中的靜態(tài)HTML內(nèi)容稱之為JSP模版元素,在靜態(tài)的HTML內(nèi)容之中可以嵌套JSP的其他各種元素來(lái)產(chǎn)生動(dòng)態(tài)內(nèi)容和執(zhí)行業(yè)務(wù)邏輯。 JSP模版元素定義了網(wǎng)頁(yè)的基本骨架,即定義了頁(yè)面的結(jié)構(gòu)和外觀。JSPJSP表達(dá)式表達(dá)式 JSP表達(dá)式(expression)提供了將一個(gè)java變量或表達(dá)式的計(jì)算結(jié)果輸出到客戶端的簡(jiǎn)化方式,它將要輸出的變量或表達(dá)式直接封裝在之中。舉例:舉例:Current time: JSP表達(dá)式中的變量或表達(dá)式的計(jì)算結(jié)果將被轉(zhuǎn)換成一個(gè)字符串,然后被插入進(jìn)整個(gè)JSP頁(yè)面輸出結(jié)果的相應(yīng)位置處。JSP表達(dá)式中的變量或表達(dá)式后面不能有分號(hào)(不能有分號(hào)(; ;),),JSP表達(dá)式被翻譯

11、成Servlet程序中的一條out.print()語(yǔ)句。JSPJSP腳本片斷(腳本片斷(1 1) JSP腳本片斷(scriptlet)是指嵌套在之中的一條或多條Java程序代碼。 在JSP腳本片斷中,可以定義變量、執(zhí)行基本的程序運(yùn)算、調(diào)用其他Java類、訪問數(shù)據(jù)庫(kù)、訪問文件系統(tǒng)等普通Java程序所能實(shí)現(xiàn)的功能。 在JSP腳本片斷可以直接使用JSP提供的隱式對(duì)象來(lái)完成WEB應(yīng)用程序特有的功能。JSP腳本片斷中的Java代碼將被原封不動(dòng)地搬移進(jìn)由將被原封不動(dòng)地搬移進(jìn)由JSPJSP頁(yè)面所翻譯成的頁(yè)面所翻譯成的ServletServlet的的_jspService_jspService方法中方法中,所

12、以,JSP腳本片斷之中只能是符合Java語(yǔ)法要求的程序代碼,除此之外的任何文本、HTML標(biāo)記、其他JSP元素都必須在腳本片斷之外編寫。 JSP腳本片斷中的Java代碼必須嚴(yán)格遵循Java語(yǔ)法,例如,每條命令執(zhí)行語(yǔ)句后面必須用分號(hào)(;)結(jié)束。 在一個(gè)JSP頁(yè)面中可以有多個(gè)腳本片斷(每個(gè)腳本片斷代碼嵌套在各自獨(dú)立的一對(duì)之間),在兩個(gè)或多個(gè)腳本片斷之間可以嵌入文本、HTML標(biāo)記和其他JSP元素。JSPJSP腳本片斷(腳本片斷(2 2) 在一個(gè)JSP頁(yè)面中可以有多個(gè)腳本片斷可以有多個(gè)腳本片斷(每個(gè)腳本片斷代碼嵌套在各自獨(dú)立的一對(duì)之間),在兩個(gè)或多個(gè)腳本片斷之間可以嵌入文本、HTML標(biāo)記和其他JSP元素

13、。舉例:這是一個(gè)HTML段落多個(gè)腳本片斷中的代碼可以相互訪問多個(gè)腳本片斷中的代碼可以相互訪問,猶如將所有的代碼放在一對(duì)之中的情況。舉例:上面的JSP內(nèi)容與下面的JSP內(nèi)容具有同樣的運(yùn)行效果這是一個(gè)HTML段落JSPJSP腳本片斷(腳本片斷(3 3) 單個(gè)腳本片斷中的單個(gè)腳本片斷中的JavaJava語(yǔ)句可以是不完整的,但是,多個(gè)腳本片斷組合后的結(jié)果必須是完語(yǔ)句可以是不完整的,但是,多個(gè)腳本片斷組合后的結(jié)果必須是完整的整的JavaJava語(yǔ)句語(yǔ)句,例如,涉及條件和循環(huán)處理時(shí),多個(gè)腳本片斷及其他元素組合的結(jié)果必須能形成完整的條件和循環(huán)控制語(yǔ)句。 由于腳本片斷中的Java代碼將被原封不動(dòng)地搬移進(jìn)由JS

14、P頁(yè)面所翻譯成的Servlet的_jspService方法中,腳本片斷之外的任何文本、HTML標(biāo)記以及其他JSP元素也都會(huì)被轉(zhuǎn)換成相應(yīng)的Java程序代碼插入進(jìn)_jspService方法中,且腳本片斷和其他JSP元素的插入位置與它們?cè)贘SP頁(yè)面中的原始位置相對(duì)應(yīng)。 在腳本片斷中可以使用條件、循環(huán)、選擇等流程控制語(yǔ)句來(lái)創(chuàng)建其周圍的其他元素的執(zhí)行邏輯,因此,在編寫JSP頁(yè)面時(shí)應(yīng)考慮各個(gè)元素之間的先后順序和相互關(guān)系,特別是將循環(huán)、條件判斷等語(yǔ)句分布在若干個(gè)腳本片斷中編寫時(shí)對(duì)其鄰近的其他JSP元素產(chǎn)生的影響。 舉例1:%for (int i=1; iH/H for (int i

15、=1; i5; i+) out.write(rn);out.write(rn);l舉例2:其他元素其他元素JSPJSP聲明聲明 JSP聲明將Java代碼封裝在之中,它里面的代碼將被將被插入進(jìn)插入進(jìn)ServletServlet的的_jspService_jspService方法的外面方法的外面,所以,JSP聲明可用于定義JSP頁(yè)面轉(zhuǎn)換成的Servlet程序的靜態(tài)代碼塊、成員變量和方法 。 多個(gè)靜態(tài)代碼塊、變量和函數(shù)可以定義在一個(gè)JSP聲明中,也可以分別單獨(dú)定義在多個(gè)JSP聲明中。JSPJSP隱式對(duì)象的作用范圍僅限于隱式對(duì)象的作用范圍僅限于ServletServlet的

16、的_jspService_jspService方法,所方法,所以在以在JSPJSP聲明中不能使用這些隱式對(duì)象聲明中不能使用這些隱式對(duì)象。 JSP腳本片斷中的Java代碼必須嚴(yán)格遵循Java語(yǔ)法,例如,每條命令執(zhí)行語(yǔ)句后面必須用分號(hào)(;)結(jié)束。 在一個(gè)JSP頁(yè)面中可以有多個(gè)腳本片斷(每個(gè)腳本片斷代碼嵌套在各自獨(dú)立的一對(duì)之間),在兩個(gè)或多個(gè)腳本片斷之間可以嵌入文本、HTML標(biāo)記和其他JSP元素。JSPJSP聲明聲明實(shí)例實(shí)例 globalVar: localVar:JSPJSP注釋注釋 JSPJSP注釋的注釋的格式:格式:%- -%JSPJSP引擎在將引擎在將JSPJSP頁(yè)面翻譯成頁(yè)面翻譯成Serv

17、letServlet程序時(shí),忽略程序時(shí),忽略JSPJSP頁(yè)面中被頁(yè)面中被注釋的內(nèi)容。注釋的內(nèi)容。 如何查找JSP頁(yè)面中的錯(cuò)誤 JSP頁(yè)面中的JSP語(yǔ)法格式有問題語(yǔ)法格式有問題,導(dǎo)致其不能被翻譯成Servlet源文件,JSP引擎將提示這類錯(cuò)誤發(fā)生在JSP頁(yè)面中的位置(行和列)以及相關(guān)信息。JSP頁(yè)面中的JSP語(yǔ)法格式?jīng)]有問題,但被翻譯成的被翻譯成的ServletServlet源文件中出現(xiàn)了源文件中出現(xiàn)了JavaJava語(yǔ)法問題語(yǔ)法問題,導(dǎo)致JSP頁(yè)面翻譯成的Servlet源文件不能通過編譯,JSP引擎也將提示這類錯(cuò)誤發(fā)生在JSP頁(yè)面中的位置(行和列)以及相關(guān)信息。JSP頁(yè)面翻譯成的翻譯成的Ser

18、vletServlet程序在運(yùn)行時(shí)出現(xiàn)異常程序在運(yùn)行時(shí)出現(xiàn)異常,這與普通Java程序的運(yùn)行時(shí)錯(cuò)誤完全一樣,Java虛擬機(jī)將提示錯(cuò)誤發(fā)生在Servlet源文件中的位置(行和列)以及相關(guān)信息。 JSPJSP指令指令 JSP指令簡(jiǎn)介 page指令 include指令 JSPJSP指令簡(jiǎn)介指令簡(jiǎn)介 JSPJSP指令(指令(directivedirective)是為)是為JSPJSP引擎而設(shè)計(jì)的,它們并不直接產(chǎn)生任何可見輸出,引擎而設(shè)計(jì)的,它們并不直接產(chǎn)生任何可見輸出,而只是而只是告訴引擎如何處理告訴引擎如何處理JSPJSP頁(yè)面中的其余部分頁(yè)面中的其余部分。JSPJSP指令的基本語(yǔ)法格式:指令的基本語(yǔ)法

19、格式:舉例:舉例:注意:注意:屬性名部分是大小寫敏感的在目前的中,定義了在目前的中,定義了pagepage、includeinclude和和taglibtaglib這三種指令,每種指令中又都定義這三種指令,每種指令中又都定義了一些各自的屬性。了一些各自的屬性。如果要在一個(gè)如果要在一個(gè)JSPJSP頁(yè)面中設(shè)置同一條指令的多個(gè)屬性,可以使用多條指令語(yǔ)句單頁(yè)面中設(shè)置同一條指令的多個(gè)屬性,可以使用多條指令語(yǔ)句單獨(dú)設(shè)置每個(gè)屬性,也可以使用同一條指令語(yǔ)句設(shè)置該指令的多個(gè)屬性。獨(dú)設(shè)置每個(gè)屬性,也可以使用同一條指令語(yǔ)句設(shè)置該指令的多個(gè)屬性。 第一種方式:第一種方式:第二種方式:第二種方式: PagePage指令

20、指令 page指令用于定義JSP頁(yè)面的各種屬性,無(wú)論page指令出現(xiàn)在JSP頁(yè)面中的什么地方,它作用的都是整個(gè)JSP頁(yè)面,為了保持程序的可讀性和遵循良好的編程習(xí)慣,page指令最好是放在整個(gè)JSP頁(yè)面的起始位置。 規(guī)范中定義的page指令的完整語(yǔ)法:JSP 引擎自動(dòng)導(dǎo)入下面的包:java.lang.*javax.servlet.*javax.servlet.jsp.*javax.servlet.http.*l可以在一條page指令的import屬性中引入多個(gè)類或包,其中的每個(gè)包或類之間使用逗號(hào)分隔:l上面的語(yǔ)句也可以改寫為使用多條page指令的import屬性來(lái)分別引入各個(gè)包或類:lerror

21、Page屬性的設(shè)置值必須使用相對(duì)路徑必須使用相對(duì)路徑,如果以“/”開頭,表示相對(duì)于當(dāng)前WEB應(yīng)用程序的根目錄(注意不是站點(diǎn)根目錄),否則,表示相對(duì)于當(dāng)前頁(yè)面。l可以在文件中使用元素為整個(gè)WEB應(yīng)用程序設(shè)置錯(cuò)誤處理頁(yè)面,其中的子元素指定異常類的完全限定名,元素指定以“/”開頭的錯(cuò)誤處理頁(yè)面的路徑。 l如果設(shè)置了某個(gè)JSP頁(yè)面的errorPage屬性,那么在文件中設(shè)置的錯(cuò)誤處理將不對(duì)該頁(yè)面起作用。lJSP引擎會(huì)根據(jù)page指令的contentType屬性生成相應(yīng)的調(diào)用方法的語(yǔ)句。lpage指令的contentType屬性還具有說明JSP源文件的字符編碼的作用。include指令 includein

22、clude指令用于通知指令用于通知JSPJSP引擎在引擎在翻譯當(dāng)前翻譯當(dāng)前JSPJSP頁(yè)面時(shí)頁(yè)面時(shí)將其他文件中的內(nèi)將其他文件中的內(nèi)容合并進(jìn)當(dāng)前容合并進(jìn)當(dāng)前JSPJSP頁(yè)面轉(zhuǎn)換成的頁(yè)面轉(zhuǎn)換成的ServletServlet源文件中,這種在源文件級(jí)別源文件中,這種在源文件級(jí)別進(jìn)行引入的方式稱之為靜態(tài)引入,進(jìn)行引入的方式稱之為靜態(tài)引入,當(dāng)前當(dāng)前JSPJSP頁(yè)面與靜態(tài)引入的頁(yè)面緊密頁(yè)面與靜態(tài)引入的頁(yè)面緊密結(jié)合為一個(gè)結(jié)合為一個(gè)ServletServlet。語(yǔ)法:語(yǔ)法:其中的file屬性用于指定被引入文件的相對(duì)路徑相對(duì)路徑。 細(xì)節(jié):細(xì)節(jié):被引入的文件必須遵循JSP語(yǔ)法,其中的內(nèi)容可以包含靜態(tài)HTML、JSP

23、腳本元素、JSP指令和JSP行為元素等普通JSP頁(yè)面所具有的一切內(nèi)容。 被引入的文件可以使用任意的擴(kuò)展名,即使其擴(kuò)展名是html,JSP引擎也會(huì)按照處理jsp頁(yè)面的方式處理它里面的內(nèi)容,為了見明知意,JSP規(guī)范建議使用.jspf(JSP fragments)作為靜態(tài)引入文件的擴(kuò)展名。 在將JSP文件翻譯成Servlet源文件時(shí),JSP引擎將合并被引入的文件與當(dāng)前JSP頁(yè)面中的指令元素(設(shè)置設(shè)置pageEncodingpageEncoding屬性的屬性的pagepage指令除外指令除外),所以,除了除了importimport和和pageEncodingpageEncoding屬性之外,屬性之外

24、,pagepage指令的其他屬性不能在指令的其他屬性不能在這兩個(gè)頁(yè)面中有不同的設(shè)置值。這兩個(gè)頁(yè)面中有不同的設(shè)置值。 include指令(續(xù)) 細(xì)節(jié):細(xì)節(jié):除了指令元素之外,被引入的文件中的其他元素都被轉(zhuǎn)換成相應(yīng)的Java源代碼,然后插入進(jìn)當(dāng)前JSP頁(yè)面所翻譯成的Servlet源文件中,插入位置與include指令在當(dāng)前JSP頁(yè)面中的位置保持一致。 引入文件與被引入文件是在被引入文件與被引入文件是在被JSPJSP引擎翻譯成引擎翻譯成ServletServlet的過程中進(jìn)行合并,的過程中進(jìn)行合并,而不是先合并源文件后再對(duì)合并的結(jié)果進(jìn)行翻譯而不是先合并源文件后再對(duì)合并的結(jié)果進(jìn)行翻譯。當(dāng)前JSP頁(yè)面的

25、源文件與被引入文件的源文件可以采用不同的字符集編碼,即使在一個(gè)頁(yè)面中使用page指令的pageEncoding或contentType屬性指定了其源文件的字符集編碼,在另外一個(gè)頁(yè)面中還需要用page指令的pageEncoding或contentType屬性指定其源文件所使用的字符集 。 在訪問JSP頁(yè)面時(shí),可以檢測(cè)它所引入的其他文件是否發(fā)生了修改,如果發(fā)生了修改,則重新編譯當(dāng)前JSP頁(yè)面filefile屬性的設(shè)置值必須使用相對(duì)路徑屬性的設(shè)置值必須使用相對(duì)路徑,如果以“/”開頭,表示相對(duì)于當(dāng)前WEB應(yīng)用程序的根目錄(注意不是站點(diǎn)根目錄),否則,表示相對(duì)于當(dāng)前文件。include指令(續(xù)) 假設(shè)m

26、yweb應(yīng)用程序的根目錄下有一個(gè)文件,其一般的訪問路徑形式為:在頁(yè)面中使用了如下語(yǔ)句引入文件:請(qǐng)問:這時(shí)候JSP引擎調(diào)用的文件的完整URL路徑為什么?如果將頁(yè)面映射為如下地址:請(qǐng)問:這時(shí)候JSP引擎調(diào)用的文件的完整URL路徑為:()()out隱式對(duì)象在在JSPJSP頁(yè)面中應(yīng)使用頁(yè)面中應(yīng)使用outout隱式對(duì)象來(lái)向客戶端發(fā)送文本形式的實(shí)體內(nèi)容隱式對(duì)象來(lái)向客戶端發(fā)送文本形式的實(shí)體內(nèi)容。 out對(duì)象是通過調(diào)用pageContext對(duì)象的getOut方法返回的,其作用和用法與方法返回的PrintWriter對(duì)象非常相似。 JSP頁(yè)面中的out隱式對(duì)象的類型為JspWriter,JspWriter相當(dāng)于

27、一種帶緩存功能的PrintWriter,設(shè)置JSP頁(yè)面的page指令的buffer屬性可以調(diào)整它的緩存大小,甚至關(guān)閉它的緩存。 JSP頁(yè)面中的out隱式對(duì)象相當(dāng)于插入到方法返回的PrintWriter對(duì)象前面的緩沖包裝類對(duì)象。只有向out對(duì)象中寫入了內(nèi)容,且滿足如下任何一個(gè)條件時(shí),out對(duì)象才去調(diào)用方法,并通過該方法返回的PrintWriter對(duì)象將out對(duì)象的緩沖區(qū)中的內(nèi)容真正寫入到Servlet引擎提供的緩沖區(qū)中:設(shè)置page指令的buffer屬性關(guān)閉了out對(duì)象的緩存功能寫入到out對(duì)象中的內(nèi)容充滿了out對(duì)象的緩沖區(qū)整個(gè)JSP頁(yè)面結(jié)束outout隱式對(duì)象的工作原理圖隱式對(duì)象的工作原理圖

28、 pageContext對(duì)象 pageContext對(duì)象簡(jiǎn)介 獲得其他隱式對(duì)象 引入和跳轉(zhuǎn)到其他資源 訪問各個(gè)域范圍中的屬性 pageContextpageContext對(duì)象簡(jiǎn)介對(duì)象簡(jiǎn)介 pageContext對(duì)象封裝了當(dāng)前JSP頁(yè)面的運(yùn)行信息,它提供了返回JSP頁(yè)面的其他隱式對(duì)象的方法。 PageContext類中定義了一個(gè)setAttribute方法來(lái)將對(duì)象存儲(chǔ)進(jìn)pageContext對(duì)象內(nèi)部的一個(gè)HashMap對(duì)象中,同時(shí)也定義了一個(gè)getAttribute方法來(lái)檢索存儲(chǔ)在該HashMap對(duì)象中的對(duì)象。 PageContext類除了可以存儲(chǔ)和檢索自身中的屬性對(duì)象外,還定義了可以存儲(chǔ)和檢索

29、其他域范圍內(nèi)的屬性對(duì)象的方法。 獲得其他隱式對(duì)象 getExceptiongetException方法返回方法返回exceptionexception隱式對(duì)象隱式對(duì)象 getPagegetPage方法返回方法返回pagepage隱式對(duì)象隱式對(duì)象getRequestgetRequest方法返回方法返回requestrequest隱式對(duì)象隱式對(duì)象 getResponsegetResponse方法返回方法返回responseresponse隱式對(duì)象隱式對(duì)象 getServletConfiggetServletConfig方法返回方法返回configconfig隱式對(duì)象隱式對(duì)象getServletCo

30、ntextgetServletContext方法返回方法返回applicationapplication隱式對(duì)象隱式對(duì)象getSessiongetSession方法返回方法返回sessionsession隱式對(duì)象隱式對(duì)象 getOutgetOut方法返回方法返回outout隱式對(duì)象隱式對(duì)象 引入和跳轉(zhuǎn)到其他資源引入和跳轉(zhuǎn)到其他資源 PageContext類中定義了一個(gè)forward方法和兩個(gè)include方法來(lái)分別簡(jiǎn)化和替代方法和方法的調(diào)用:public void forward(java.lang.String relativeUrlPath)public void include(java

31、.lang.String relativeUrlPath)public void include(java.lang.String relativeUrlPath,boolean flush)傳遞給這些方法的資源路徑都只能是相對(duì)路徑,如果路徑以“/”開頭,表示相對(duì)于當(dāng)前WEB應(yīng)用程序的根目錄,否則,表示相對(duì)于當(dāng)前JSP所映射到的訪問路徑。訪問各個(gè)域范圍中的屬性訪問各個(gè)域范圍中的屬性在application、session、request、pageContext對(duì)象中都可以調(diào)用setAttribute方法和getAttribute方法來(lái)設(shè)置和檢索各自域范圍內(nèi)的屬性。存儲(chǔ)在application對(duì)

32、象中的屬性可以被同一個(gè)WEB應(yīng)用程序中的所有Servlet和JSP頁(yè)面訪問。存儲(chǔ)在session對(duì)象中的屬性可以被屬于同一個(gè)會(huì)話的所有Servlet和JSP頁(yè)面訪問。存儲(chǔ)在request對(duì)象中的屬性可以被屬于同一個(gè)請(qǐng)求的所有Servlet和JSP頁(yè)面訪問,例如使用和方法連接起來(lái)的多個(gè)Servlet和JSP頁(yè)面。 存儲(chǔ)在pageContext對(duì)象中的屬性僅可以被當(dāng)前JSP頁(yè)面的當(dāng)前響應(yīng)過程中調(diào)用的各個(gè)組件訪問,例如,正在響應(yīng)當(dāng)前請(qǐng)求的JSP頁(yè)面和它調(diào)用的各個(gè)自定義標(biāo)簽類。 PageContext類中還提供了對(duì)各個(gè)域范圍的屬性進(jìn)行統(tǒng)一管理的方法,以簡(jiǎn)化對(duì)各個(gè)域范圍內(nèi)的屬性的訪問。 訪問各個(gè)域范圍中

33、的屬性(續(xù))訪問各個(gè)域范圍中的屬性(續(xù))setAttributesetAttribute方法方法 public void setAttribute(java.lang.String name,java.lang.Object value)public void setAttribute(java.lang.String name,java.lang.Object value,int scope) 常量常量getAttributegetAttribute方法方法public java.lang.Object getAttribute(java.lang.String name)public ja

34、va.lang.Object getAttribute(java.lang.String name,int scope)removeAttributeremoveAttribute方法方法 public void removeAttribute(java.lang.String name)public void removeAttribute(java.lang.String name,int scope)getAttributeNamesInScopegetAttributeNamesInScope方法方法 findAttributefindAttribute方法方法 (* *)JSPJSP

35、標(biāo)簽標(biāo)簽概念概念JSP還提供了一種稱之為Action的元素,在JSP頁(yè)面中使用Action元素可以完成各種通用的JSP頁(yè)面功能,也可以實(shí)現(xiàn)一些處理復(fù)雜業(yè)務(wù)邏輯的專用功能。 Action元素采用XML元素的語(yǔ)法格式,即每個(gè)Action元素在JSP頁(yè)面中都以XML標(biāo)簽的形式出現(xiàn)。JSP規(guī)范中定義了一些標(biāo)準(zhǔn)的Action元素,這些元素的標(biāo)簽標(biāo)簽名都以名都以jspjsp作為前綴,并且全部采用小寫作為前綴,并且全部采用小寫,例如,、等等。 JSPJSP標(biāo)簽標(biāo)簽內(nèi)容內(nèi)容標(biāo)簽 標(biāo)簽 標(biāo)簽 標(biāo)簽標(biāo)簽 標(biāo)簽用于把另外一個(gè)資源的輸出內(nèi)容插入進(jìn)標(biāo)簽用于把另外一個(gè)資源的輸出內(nèi)容插入進(jìn)當(dāng)前當(dāng)前JSPJSP頁(yè)面的輸出內(nèi)容

36、之中,這種在頁(yè)面的輸出內(nèi)容之中,這種在JSPJSP頁(yè)面執(zhí)行時(shí)的引頁(yè)面執(zhí)行時(shí)的引入方式稱之為動(dòng)態(tài)引入入方式稱之為動(dòng)態(tài)引入。語(yǔ)法:語(yǔ)法:jsp:include page=relativeURL | flush=true|false / page屬性用于指定被引入資源的相對(duì)路徑相對(duì)路徑,它也可以通過執(zhí)行一個(gè)表達(dá)式來(lái)獲得。flush屬性指定在插入其他資源的輸出內(nèi)容時(shí),是否先將當(dāng)前JSP頁(yè)面的已輸出的內(nèi)容刷新到客戶端。 標(biāo)簽與標(biāo)簽與includeinclude指令的比較指令的比較 標(biāo)簽是在當(dāng)前JSP頁(yè)面的執(zhí)行期間執(zhí)行期間插入被引入資源的輸出內(nèi)容,當(dāng)前JSP頁(yè)面與被動(dòng)態(tài)引入的資源是兩個(gè)彼此獨(dú)立的執(zhí)行實(shí)體,

37、被動(dòng)態(tài)被動(dòng)態(tài)引入的資源必須是一個(gè)能獨(dú)立被引入的資源必須是一個(gè)能獨(dú)立被WEBWEB容器調(diào)用和執(zhí)行的資源容器調(diào)用和執(zhí)行的資源。include指令只能引入遵循JSP格式的文件,被引入文件與當(dāng)前JSP文件共同合被翻譯成一個(gè)Servlet的源文件。 使用標(biāo)簽和include指令都可以把一個(gè)頁(yè)面的內(nèi)容分成多個(gè)組件來(lái)生成,開發(fā)者不必再把頁(yè)眉和頁(yè)腳部分的相同HTML代碼復(fù)制到每個(gè)JSP文件中,從而可以更輕松地完成維護(hù)工作,但是都應(yīng)注意最終的輸出結(jié)都應(yīng)注意最終的輸出結(jié)果內(nèi)容應(yīng)遵循果內(nèi)容應(yīng)遵循HTMLHTML語(yǔ)法結(jié)構(gòu)語(yǔ)法結(jié)構(gòu),例如,如果當(dāng)前頁(yè)面產(chǎn)生了、等標(biāo)記,那么在被引入文件中就不能再輸出、等標(biāo)記。 標(biāo)簽對(duì)標(biāo)簽對(duì)

38、JSPJSP引擎翻譯引擎翻譯JSPJSP頁(yè)面的過程不起作用頁(yè)面的過程不起作用,它是在JSP頁(yè)面的執(zhí)行期間才被調(diào)用,因此不會(huì)影響兩個(gè)頁(yè)面的編譯。由于includeinclude指令指令是在是在JSPJSP引擎翻譯引擎翻譯JSPJSP頁(yè)面的過程中被解釋處理的,所以它對(duì)頁(yè)面的過程中被解釋處理的,所以它對(duì)JSPJSP引擎翻譯引擎翻譯JSPJSP頁(yè)面的過程起作用頁(yè)面的過程起作用,如果多個(gè)JSP頁(yè)面中都要用到一些相同的聲明,那么就可以把這些聲明語(yǔ)句放在一個(gè)單獨(dú)的文件中編寫,然后在每個(gè)JSP頁(yè)面中使用include指令將那個(gè)文件包含進(jìn)來(lái)。 標(biāo)簽與標(biāo)簽與includeinclude指令的比較指令的比較 標(biāo)簽使

39、用page屬性指定被引入資源的相對(duì)路徑引入資源的相對(duì)路徑,而include指令使用file屬性指定被引入資源的相對(duì)路徑。假設(shè)myweb應(yīng)用程序的根目錄下有一個(gè)文件,其一般的訪問路徑形式為:在頁(yè)面中使用了如下語(yǔ)句引入文件:請(qǐng)問:這時(shí)候JSP引擎調(diào)用的文件的完整URL路徑為什么?如果將頁(yè)面映射為如下地址:請(qǐng)問:這時(shí)候JSP引擎調(diào)用的文件的完整URL路徑為:()()標(biāo)簽標(biāo)簽標(biāo)簽用于把請(qǐng)求轉(zhuǎn)發(fā)給另外一個(gè)資源。標(biāo)簽用于把請(qǐng)求轉(zhuǎn)發(fā)給另外一個(gè)資源。語(yǔ)法:語(yǔ)法:jsp:forward page=relativeURL | / page屬性用于指定請(qǐng)求轉(zhuǎn)發(fā)到的資源的相對(duì)路徑,它也可以通過執(zhí)行一個(gè)表達(dá)式來(lái)獲得。方法、方法、標(biāo)簽的區(qū)別l調(diào)用方法的JSP腳本代碼的前后不能有JSP模版內(nèi)容。l調(diào)用方法的JSP腳本代碼的后面不能有JSP模版內(nèi)容。l標(biāo)簽的前后都能有JSP模版內(nèi)容。標(biāo)簽標(biāo)簽 當(dāng)使用當(dāng)使用和和標(biāo)簽引入或?qū)⒄?qǐng)求轉(zhuǎn)發(fā)給的資源標(biāo)簽引入或?qū)⒄?qǐng)求轉(zhuǎn)發(fā)給的資源是一個(gè)能動(dòng)態(tài)執(zhí)行的程序時(shí),例如是一個(gè)能動(dòng)態(tài)執(zhí)行的程序時(shí),例如ServletServlet和和JSPJSP頁(yè)面,那么,還可以使頁(yè)面,那么,還可以使用用標(biāo)簽向這個(gè)程序傳遞參數(shù)信息。標(biāo)簽向這個(gè)程序傳遞參數(shù)信息。語(yǔ)法語(yǔ)法1 1:jsp:include page=relativeURL | jsp:param name=parameterName va

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論