動態Web數據庫技術-基于JSP和XML技術實現2基礎_第1頁
動態Web數據庫技術-基于JSP和XML技術實現2基礎_第2頁
動態Web數據庫技術-基于JSP和XML技術實現2基礎_第3頁
動態Web數據庫技術-基于JSP和XML技術實現2基礎_第4頁
動態Web數據庫技術-基于JSP和XML技術實現2基礎_第5頁
已閱讀5頁,還剩130頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、王紅第2章JSP基礎 2022/9/281主要內容第2章 JSP基礎2.1 JSP概述 2.2 JSP頁面的基本組成 2.3 JSP頁面中的注釋 2.4 聲明 2.5 JAVA代碼段2.6 表達式2.7 .JSP指令 2.8 JSP動作 2022/9/2822.1 JSP概述2.1.1 第一個JSP頁面 2.1.2 JSP運行原理 2.1.3 JSP與Servlet的關系 2.1.4配置JSP運行環境 2.1.5可以支持JSP運行的其他服務器 2.1.6 JSP頁面測試 2022/9/2832.1.1 第一個JSP頁面JSP 是 Sun Microsystems 公司的一種規范.它將 Java

2、 與 HTML 相結合顯示與處理分離JSP 可結合其他Java 組件一起使用JSP 是使用Java 開發基于 Web 的應用程序不可或缺的部分典型的web應用組成:applet, JSP, Servlet, Javabean, HTML,XML,EJB,容器2022/9/284JSP概念 JSP的執行2022/9/2852.1.1 第一個JSP頁面JSP頁面可以用任何編輯器編寫,只需要確保以.jsp擴展名保存此文檔 第一個簡單的JSP頁面example2_1.jsp 2022/9/2862.1.2 JSP運行原理JSP頁面在運行之前要被解釋成Java Servlet ,然后它可以處理HTTP請

3、求并生成響應信息 JSP容器的工作過程如下圖所示:判斷與JSP文件對應的類的名字 如果該類不存在或比.jsp文件的老 ,容器就會重新創建一個等價的Servlet類并編譯它 如果Servlet類存在只是其實例并末運行,容器就載入該Servlet類并創建一個實例 容器啟動一個線程在載入的實例中處理當前Http請求 2022/9/287JSP和Servlet的關系My name is jb-aptech!String str = “My name is java”;out.println(str);JSP把靜態內容和代碼分離標記Servlet第一個請求產生應答被轉換為以后的請求2022/9/288J

4、SP和Servlet的關系解析jsp 接受請求生成jsp的servlet 編譯servlet 加載servlet 生成響應 JSP Servlet最新?JSP Servlet加載?發送請求nnyy2022/9/289JSP執行過程*.jsp*.java*.classrequestresponse執行jsp parserJSDKservletservlet 分析器2022/9/28102.1.2 JSP運行原理JSP頁面的運行過程是由JSP容器和Servlet容器實現的 JSP容器是被Servlet容器所運行的 不同銷售商都有自己的JSP容器實現,但是它都是由一個Servlet或者一套Servl

5、et來組成的 JSP容器用以替代早期標準中的術語JSP引擎 2022/9/28112.1.2 JSP運行原理觀察一個JSP頁面HelloWorld.jsp 觀察HelloWorld.jsp 對應的Servlet類HelloWorld_jsp.java 可見,JSP在運行前首先將編譯為一個Servlet,這就是理解JSP技術的關鍵 如下圖所示:2022/9/2812JSP和Servlet的關系轉換后的servlet JSP文件javax.servlet.jsp.JspPage JspInit()方法 JspDestroy()方法 JspService()方法 實現Servlet接口 init()

6、方法 destroy()方法 service()方法 相似2022/9/28132.1.2 JSP運行原理為什么要把JSP轉為Servlet再去運行呢? Servlet擴展Web server上呈現是一種強有力的方法 Servlet提供了公認的Java在獨立于平臺、獨立安全性以及強壯性等方面的優點 服務器端為Servlet提供了很多底層支持,如安全性 Servlet在訪問數據時更加直接 2022/9/28142.1.3 JSP與Servlet的關系Servlet就是服務器端小程序Servlet技術是早期為了Java的服務器端應用而開發的 Servlet顯示頁面非常笨拙 ,因此在Servlet技

7、術之上開發了JSPJSP和Servlet之間有著內在的血緣關系,注意抓住這種聯系JSP 頁面和Servlets 程序是可以相互操作 2022/9/28152.1.3 JSP與Servlet的關系在HTML頁面中內嵌Java代碼和Java調用與直接在Servlet程序中編寫Java代碼相比起來更為方便 比較Servlet代碼和JSP代碼(example2_2.jsp),它們的運行的結果完全相同的如圖2-3所示 2022/9/28162.1.3 JSP與Servlet的關系并不是說Servlet可以不用了 ,Servlet完成簡單的業務邏輯和處理JSP不好處理的后臺服務以及其他特殊要求等問題 Se

8、rvlet作為MVC(Model-View-Control)設計模式中的控制器 常見的情況是將兩者結合使用 2022/9/28172.1.4配置JSP運行環境 并不是說Servlet可以不用了 ,Servlet完成簡單的業務邏輯和處理JSP不好處理的后臺服務以及其他特殊要求等問題 Servlet作為MVC(Model-View-Control)設計模式中的控制器 常見的情況是將兩者結合使用 2022/9/28182.1.3 JSP與Servlet的關系并不是說Servlet可以不用了 ,Servlet完成簡單的業務邏輯和處理JSP不好處理的后臺服務以及其他特殊要求等問題 Servlet作為MV

9、C(Model-View-Control)設計模式中的控制器 常見的情況是將兩者結合使用 2022/9/28192.1.3 JSP與Servlet的關系并不是說Servlet可以不用了 ,Servlet完成簡單的業務邏輯和處理JSP不好處理的后臺服務以及其他特殊要求等問題 Servlet作為MVC(Model-View-Control)設計模式中的控制器 常見的情況是將兩者結合使用 2022/9/28202.1.4 配置JSP運行環境 Apache的Tomcat是一種免費Web服務器,安裝主要步驟如下:(1) 安裝JDK。(2)從SUN公司的網站免費下載jakarta-tomcat.zip (

10、3) 解壓此文件(4)按照提示安裝Tomcat(5) 設置環境變量 2022/9/28212.1.4 配置JSP運行環境 (6) 啟動Tomcat (7) 通過瀏覽器中觀察主頁http:/localhost:8080的主頁,運行結果如圖2-7所示,表示Tomcat運行正常 。 2022/9/28222.1.4 配置JSP運行環境 (8) 通過點擊JSP example并執行所列出的示例之一,確保它正確地提供jsp服務 需要注意的問題:(1)如果Tomcat不能正常啟動,檢查環境變量的設置 (2)如果Tomcat仍然不能正常啟動,檢查是否有端口沖突 ,通過 server.xml可以更改Tomca

11、t的端口號。 2022/9/28232.1.5 可以支持JSP運行的其他服務器 JavaServer Web Development Kit (JSWDK) Allaire Jrun New Atlanta的ServletExec Gefion的LiteWebServer (LWS) Sun的Java Web Server WebLogic Server 除了上述WEB服務器外,目前還有很多WEB服務器,如Resin,Jboss等 2022/9/28242.1.6 JSP頁面測試 運行一個JSP頁面的主要步驟如下: 用一種文本編輯器編輯JSP源文件(example2_3.jsp) 將JSP文件

12、保存到C:Tomcatwebappsroot目錄下。在IE地址欄中鍵入http:/localhost:8080/example2_3.jsp,對頁面進行測試,運行結果如圖2-9所示。 2022/9/28252.1.6 JSP頁面測試幾點說明: 可以在c:tomcatworklocalhost_下找到example2_3.jsp的字節碼文件。 Tomcat服務器有幾個默認的WEB服務目錄 可以自己新建web目錄。新建的web目錄可以放在c:tomcatwebapps下面 ,也可以不在 。若不在,則需要修改server.xml 2022/9/28262.1.7 小結 JSP的優點 “編寫一次,隨處

13、運行”高品質工具支持組件和標記庫的重用動態內容與靜態內容的分離對腳本和動作的支持多層企業應用程序體系結構的 Web 訪問層表示與實現的分離2022/9/28272.2 JSP頁面的基本組成 一個JSP頁面是由傳統的HTML頁面標記加上JSP標記和嵌入的JAVA代碼組成 。具體地說,由以下4種元素組成:HTML標記、JSP標記、JSP腳本和注釋JSP標記包括指令標記和動作標記指令標記是為JSP引擎而設計的 ,并不直接產生任何可見輸出 ,只是告訴引擎如何處理其余JSP頁面 動作標記是JSP頁面特有的標記,它告訴WEB容器去執行某個“動作” JSP腳本是JSP頁面中插入的java代碼,它又可以細分為

14、聲明、代碼段和表達式 2022/9/28282.2 JSP頁面的基本組成 聲明用于定義特定于JSP頁面(Servlet)的變量、方法和類;代碼段是嵌入的JAVA語句表達式是JAVA腳本中輸出語句的簡化表示形式 例子example2_4.jsp 說明JSP頁面的不同組成成分,運行效果如圖2-10所示 2022/9/2829JSP標記類型 :指令JSP指令:用于設置全局值,是向包容器發送的。并且不向客戶端產生輸出向操作系統發送配置命令JSP指令WEB包容器發送相似2022/9/2830JSP標記類型:腳本和動作腳本元素:可以在JSP頁面中插入Java代碼。 動作:包容器遇到“動作標記”再執行“動作

15、”。 2022/9/2831JSP通用規則 JSP區分大小寫指令和腳本元素所擁有的語法不是基于 XML的,但也可以獲得一種可以替代的基于 XML的語法。比如指令:的等價的XML語法為:在標記中出現的屬性值總是用引號括起來的:使用單引號或雙引號。如果引號是屬性值本身的一部分的話,就可以使用特殊的字符串'和(就像在HTML中一樣)。 2022/9/2832JSP通用規則(續)在標記中可以使用字符 (反斜杠)來作為換碼字符(例如,要使用 %,就要使用 %字符序列)。JSP使用的 URL要遵循 servlet的慣例,并且以一個 /開始的 URL叫做上下文相關路徑,如果URL不是以/開始的,就

16、被解釋為相對于當前的JSP。 在文檔體中的文本中的空白符無關緊要。 2022/9/28332.3 JSP頁面中的注釋 注釋是由程序員插入的、用于解釋JSP源代碼的句子或短語 注釋不影響瀏覽器對頁面的顯示,但是可以有助于用戶理解生成此頁面的HTML和JSP源代碼 類型:HTML 注釋隱藏注釋腳本注釋2022/9/28342.3 JSP頁面中的注釋2.3.1 HTML 注釋類似于在 HTML 中使用的那些注釋可在其中包括動態內容瀏覽器察看源文件可看到由于注釋不是簡單地被JSP忽略,因此它們可以包含內嵌的動態內容。HTML注釋之內的JSP表達式將被計算并插入到發送給瀏覽器的響應中 2022/9/28

17、352.3 JSP頁面中的注釋如example2_6.jsp ,運行結果如圖2-12所示。2022/9/28362.3 JSP頁面中的注釋再如: HTML注釋 未顯示上一行的注釋。2022/9/28372.3 JSP頁面中的注釋2022/9/28382.3 JSP頁面中的注釋再如:要多加練習 !-This page was loaded on - 在源文件中包括當前時間。 2022/9/28392.3 JSP頁面中的注釋2022/9/2840IE中的源程序有注釋2022/9/28412.3 JSP頁面中的注釋2.3.2 隱藏注釋只能通過查看原始 JSP 文件查看JSP 容器忽略此注釋的主體在J

18、SP編譯成的Servlet中看不到隱藏注釋如example2_7.jsp ,運行結果如圖2_13所示。 2022/9/2842隱藏注釋 A Comment Test A Test of Comments 2022/9/2843隱藏注釋 2022/9/2844在IE中查看源代碼2022/9/28452.3 JSP頁面中的注釋2.3.3 腳本注釋java腳本中的注釋語法形式為:/ 單行注釋/* 注釋 */不僅能在原始JSP文件中看到,而且在翻譯成的servlet中可見 ,可參見其對應的Servlet 舉例example2_8.jsp,運行結果如圖2-14所示2022/9/28462.3 JSP頁面

19、中的注釋2022/9/2847JSP腳本元素(scriptlets)使開發者能直接將代碼嵌入 JSP 頁面 類型:聲明代碼段表達式 2022/9/28482.4 聲明 2.4.1 變量聲明2.4.2 方法聲明2.4.3 聲明類 2022/9/28492.4 聲明 用于定義特定于 JSP 頁面的(servlet)變量和方法 在jsp初始化是完成初始化等價與靜態變量,即一個客戶的操作會影響另外客戶不會向流中寫任何信息可被該jsp頁面中其他任何部分使用語法:聲明的類型:變量聲明方法聲明聲明類2022/9/2850 聲明是JSP中的Java代碼塊,它用來在所產生的 servlet中定義類范圍的變量和方

20、法。產生的servlet實例化時執行代碼塊。 2.4 聲明 2022/9/28512.4 聲明 2.4.1 變量聲明聲明的變量成了 JSP 頁面被轉換和編譯到的 servlet 類的實例變量,各個客戶端可共享語法: 等價的XML語法形式為:jsp:declaration 變量聲明/jsp:declaration 如:聲明的變量類型可以是JAVA語言中允許的任何數據類型 2022/9/28522.4 聲明 2.4.2 方法聲明定義的方法在整個JSP頁面有效 將編譯成的 Servlet 類的成員方法可以由頁面上所有腳本元素訪問其語法形式為:等價的XML語法形式為: jsp:declaration

21、方法聲明 /jsp:declaration 方法聲明方式跟Java中方法定義的形式一樣,要給出方法返回類型、方法名、方法形參和方法體。注意:雖然方法是客戶共享的,但方法中的變量并不是客戶共享的。 2022/9/28532.4 聲明 2.4.2 方法聲明如:舉例: declareation.jsp example2_4.jsp(聲明方法) example2_5.jsp(改進,寫文件) example2_6.jsp(共同計算pi)2022/9/28542.4 聲明 2.4.2 方法聲明舉例: example2_9.jsp,運行結果如圖2-15所示 2022/9/28552.4 聲明 2.4.2 方

22、法聲明舉例: example2_10.jsp是對example2_9.jsp的改進舉例: example2_11.jsp實現所有訪問該頁面的客戶共同參與圓周率的計算。由于聲明的變量能被客戶共享,因此訪問該頁面的客戶越多,的計算就越精確。運行結果如圖2-16所示 2022/9/28562.4 聲明 2.4.3 聲明類定義的方法將編譯成的 Servlet 類的內部類可以由頁面上所有腳本元素創建該類對象例example2_12.jsp定義一個Square類,當客戶訪問該頁面時,服務器創建該類的對象,只要客戶給出方的邊長,就可以求出方的周長和面積。運行結果如圖2-17所示 2022/9/28572.4

23、聲明 2.4.3 聲明類2022/9/28582.5 代碼段包含一個或多個有效而完整的語句是在請求處理期間要執行的 Java代碼塊,可以包含向客戶產生輸出。語法: 或 / 這里是 Java 代碼 例:2022/9/28592.5 代碼段 Scriptlet test page % for(int i=0;i 10;i+) out.println(Hello World. This is a scriptlet test + i + ); System.out.println(This goes to the System.out stream + i); % 2022/9/28602.5 代碼

24、段需要注意:(1)一個JSP頁面可以有多個JAVA代碼段,這些代碼段被JSP引擎按順序執行(2)在代碼段中也可以聲明變量,但這些變量是JSP頁面的局部變量 (3)代碼段之間可以插入JSP頁面的一些其它標記元素 (4)一個用戶對JSP頁面局部變量的操作不會影響其它客戶 (5)代碼段中要求是JAVA語句,語句必須以分號結束 2022/9/28612.5 代碼段下面例子example2_13.jsp和例子example2_14.jsp功能基本相同,計算1到10的連續和。其中例子example2_14.jsp中包含多個JAVA代碼段,并且中間插入HTML標記。此時要特別注意JAVA代碼的完整性。運行結

25、果如圖2-18所示 2022/9/28622.5 代碼段再如: test 2022/9/28632.5 代碼段%condition=1;switch(condition)case 0:out.println(You must select condition 0!+); break; case 1: out.println(You must select condition 1!+); 2022/9/28642.5 代碼段break; case 2: out.println(You must select condition 2!+); break; default: out.println(

26、Your select not in 0,1,2,select again!+);% 轉義符: 雙引號 “ ,單引號,反斜杠,回車r,換行n,制表符t,退格b2022/9/2865腳本段執行結果2022/9/28662.6 表達式包含任何語言表達式在請求處理階段計算值,將結果轉成String并輸出不以分號結束用于輸出單個變量或某個計算的結果 語法: 或 如: 2022/9/28672.6 表達式注意:(1)“%=”是一個完整的符號,“%”和“=”不能插入空格。(2)表達式可以包含任何JAVA語言表達式,只要表達式可以求值。 (3) 表達式中不能插入語句,也不能以分號結束 (4)表達式是JAVA

27、代碼段的一種簡單書寫方式,它的功能和代碼段等效,如圖2-19所示 2022/9/28682.6 表達式在JSP中out.print(“number” + i);在servlet中相當于假如i值為5,則:打印:number52022/9/28692.6 表達式例example2_15.jsp求各種表達式的結果。運行結果如圖2-20所示 2022/9/2870%!、%= 和 %之間的區別 變量聲明后面必須帶分號表達式可以包含任何語言表達式,并不以分號結束代碼段中,如果語言要求語句以分號結束,則必須提供分號2022/9/28712.7 JSP指令 2.7.1 page指令2.7.2 include指

28、令2.7.3 taglib指令 2022/9/28722.7 JSP指令 將有關頁面的特殊處理信息傳送到JSP容一個指令影響整個JSP文件 。指令以 終止 。 類型:include 指令page 指令taglib 指令2022/9/28732.7 JSP指令 2.7.1 page 指令page 指令將頁面特定的信息傳遞給 JSP 引擎 用來定義和操作許多重要的依賴于頁面的屬性,這些屬性影響整個JSP文件(整個編譯后的類文件)在 JSP中的任何地方、以任何順序,一個頁面可以包含任意數量的 page指令。但是任何的屬性/值對只能出現一次 。(除import外 )如: 2022/9/28742.7

29、JSP指令2.7.1 page 指令語法: 或 2022/9/28752.7 JSP指令 page 屬性 infolanguage contentTypeextendsimportsessionbufferautoFlush isThreadSafeerrorPageisErrorPage等2022/9/28762.7 JSP指令屬性描述缺省值language定義要使用的腳本語言。如果在將來 JSP包容器支持多種語言時可使用它“Java”import定義以逗號分隔的類或包的列表,就像在通常的 Java代碼中所使用的import語句那樣缺省情況下忽略,但已經引入4個包buffer定義對客戶的輸出

30、流的緩沖模型。如果值為“none”,則沒有緩沖,而是所有的輸出都被PrintWriter直接寫到ServletResponse中。如果定義了緩沖區的尺寸(如“24kb”),則將輸出寫到不小于該值的緩沖區中與實現有關;至少為 8KB2022/9/28772.7 JSP指令autoFlush如果值為“true”,則當緩沖區滿時,自動把輸出緩沖輸出給客戶如果值為“false”,則當緩沖區滿時,會有一個運行時異常“true”isThreadSafe如果值為“true”,則JSP引擎會同時向該頁面發送多個客戶請求。如果值為“false”,則JSP引擎會對發送給該頁面的客戶請求進行排隊和處理,并且按照請求

31、被收到的順序,在某個時刻只處理一個請求(庫操作)。“true”contentType定義JSP的字符編碼方式和JSP頁面的應答的MIME類型。它的形式可以為MIMETYPE或“MIMETYPE; charset =CHARSET”。MIMETYPE的缺省值為text/html;CHARSET的缺省值為ISO-8859-12022/9/28782.7 JSP指令InfopageEncoding字符串Jsp頁面字符編碼無缺省默認iso-8859-1extends轉換成servlet時指定父類無缺省Extends=“com.lib.myjsp”isErrorPageisELIgnored布爾值,為t

32、rue,jsp容器會自動產生Exception對象。布爾值,是否忽略&的計算 false由版本確定session布爾值,本頁是否使用session對象True errorPage本地url,本頁面異常時的處理頁面無 ,errorPage=“/result/err.jsp2022/9/28792.7 JSP指令 下面的例子演示了page的language、import、contentType、buffer、autoFlush、isThreadSafe2022/9/28802.7 JSP指令 例example2_16.jsp表明info屬性的使用,可以通過getServletInfo()取到inf

33、o屬性的值,運行結果如圖2-21所示 2022/9/28812.7 JSP指令 下例說明errorPage屬性和 isErrorPage屬性的使用,運行結果如圖2-22,2-23,2-24所示 2022/9/28822.7 JSP指令 2.7.2 include 指令使頁面作者能將一個文件的內容包括在另一個文件中語法:該指令的作用是在JSP頁面中該指令出現的位置靜態的插入一個文件。所謂靜態插入,是指當前的JSP頁面和被嵌入的文件合并成一個新的JSP頁面,然后JSP引擎再將這個新頁面轉換成Servlet。include指令能讓你將你的頁面內容分成幾個組成部分分別管理 2022/9/28832.7

34、 JSP指令 2.7.2 include 指令注意: 出現在一個 JSP 頁面中的 include 指令的數量不受限制 靜態插入,即內聯方式(可看servlet),與include動作的區別 必須為localURL 發生在編譯期間,但服務器可自動識別更新 注意合并后的語法2022/9/28842.7 JSP指令 Include directive test page Include directive test page 2002 JB-Aptech Press copyright.html:嵌入2022/9/28852.7 JSP指令 2.7.2 include 指令下面例example2_

35、17.jsp中使用include指令嵌入computer.jsp,運行結果如圖2-25所示 2022/9/28862.7 JSP指令 2.7.2 include 指令例example2_18.jsp中嵌入hello.txt。hello.txt的內容是:歡迎你參加激動人心的JSP之旅。運行結果如圖2-26所示 2022/9/28872.7 JSP指令 2.7.3 taglib指令自定義標記提供了可重用、可維護及可移植的內容生成解決方案 通知 JSP 容器,頁面依賴于自定義標記庫標記庫是擴展 JSP 的功能的自定義標記的集合所有jsp自定義標記按組存放在標記庫中,使用與標記庫相關的前綴區分這些標記

36、,這樣可以使用不同標記庫中的相同標記。 2022/9/28882.7 JSP指令2.7.3 taglib指令編寫JSP頁面時可以直接使用標記庫中的標記,就象使用JSP的標準標記一樣Jsp定制標記遵循xml規范,這意味著可以在xml和html中使用用戶自定義標記2022/9/28892.7 JSP指令自定義標記的特征:可以由主體也可以為空 可以以任何深度嵌套在其它自定義標記中可以處理主體內容,如過濾和編輯屬性的使用可以在同一頁面內與其它標記協同工作可以訪問頁面信息,如請求,響應,會話等可以創建腳本變量2022/9/28902.7 JSP指令自定義標記主要優點:易于安裝在多個項目上,提升代碼重用性

37、,加快開發速度自定義標記與jsp規范完全兼容標記庫使web應用易于維護在JSPT上可找到最好的標記資源。經過多次使用的代碼具有更少的bug2022/9/28912.7 JSP指令 2.7.3 taglib指令語法:其中uri是用戶子定義標記庫的url地址,prefix是用戶子定義標記的前綴 2022/9/28922.7 JSP指令 2.7.3 taglib指令要使用用戶自定義標記庫,需要以下幾方面的支持標記處理器 標記庫描述文件 web.xml文件中標記庫的描述 在jsp頁面中使用用戶子定義標記其實,使用標記庫的關鍵不是編碼,而是能將上述各部分正確的組織起來。這種層次結構非常重要。也正是如此,

38、標記庫才既靈活又便于使用 2022/9/28932.7 JSP指令web.xml Demo.tld 標記處理程序類Tagdemo.jsp2022/9/2894標記擴展的工作過程hello.jsp/hello /WEB-INF/tlds/hello.tld web.xmlexample hellotagext.HelloTaghello.tldnew tagext.HelloTag();tagext.HelloTag實例化1. 當在jsp中遇到自定義標記時,要找到標記處理器,首先要實例化標記處理器類2022/9/2895標記擴展的工作過程(續)調用對象的doStartTag()方法調用對象的do

39、EndTag()方法以后在JSP中遇到標記庫中的標記,調用標記處理器的相應方法。 2022/9/2896web.xml聲明 /hello /WEB-INF/tlds/hello.tld 2022/9/2897標記擴展 的web.xml文件使用標記來讓服務器知道當在要在JSP引入標記時,從哪兒可以找到TLD。 /hello標記對應于hello.jsp中的該行代碼:標記指明標記描述器的位置。2022/9/2898標記庫描述文件 TLD必須符合xml規范/servlet容器對其作dtd驗證 1.0 1.1 mytag this is a sample 2022/9/2899標記庫描述文件 其中sho

40、rtname和tlibversion必須tlibversion:標記庫版本號,N.N.N.N形式,不能省略第一個Njspversion:與該標記庫兼容的jsp規范版本號。缺省為1.1。shortname:標記庫缺省名空間前綴uri:標記庫可用公共副本來源標記庫的描述信息2022/9/28100標記庫描述文件 TLD 中除了包含關于作為整體的庫還包含在庫中每個標記和屬性的信息。2022/9/28101標記庫描述文件 標記元素的信息 Greeting examples.servlets.Greeting empty Tag with Parameter標記庫中能夠包含任何數量的標記。比如此例子,我

41、們還可以增加另外的標記。Tag可以有很多子標記,但只有name和tagclass是必需的Greeting表示標記名稱,也即標記的后綴。2022/9/28102標記庫描述文件 如: forProperty com.taglib.wdjsp.mut.ForPropertyTag com.taglib.wdjsp.mut.ForPropertyTei JSP :標記處理程序類助手類,定義標記的腳本編程變量的類 取JSP,empty,tagdependent之一Jsp(默認)servlet容器對內容求值Empty:主體必須為空Tagdependent:由標記處理程序對內容求值2022/9/28103標

42、記庫描述文件 標記屬性的信息 num1 true false是tag的子標記有三個子標記,name必須name:標記中屬性名require:表示屬性是否必須rtexprvalue:表示屬性是否可由請求時的屬性值來指定2022/9/28104標記處理程序 執行與自定義標記關聯的動作的 Java 對象必須實現javax.servlet.jsp.tagext包的Tag或Body Tag接口Tag 接口支持以下方法:void setPageContext(PageContext)void setParent(Tag)int doStartTag() throws JspExceptionint doE

43、ndTag() throws JspExceptionvoid release()開發人員很少直接實現tag接口,因為TagSupport和BodyTagSupport類對上述接口做默認實現2022/9/28105標記處理程序 處理過程setPageContext()setParent()doStartTagdoEndTagrelease()停止處理主體注:所有標記都有父標記,頂級標記的父標記為null.通過tag接口可訪問其父標記,但父標記的設置方法與頁面上下文和servlet容器的實現過程密切相關,jsp開發人員一般不會調用它。2022/9/28106標記處理程序 doStartTag()

44、自定義標記開始時調用返回在標記接口中定義的 int 常量的EVAL_BODY_INCLUDE或 SKIP_BODY,以決定是否處理標記的主題部分。doEndTag()在自定義標記結束時調用返回 EVAL_PAGE 或 SKIP_PAGE,以決定是否處理頁面的其余部分。Release():在處理程序結束時,即在jsp頁面結尾處被調用,釋放各種資源。2022/9/28107標記處理程序示例import java.io.*;import javax.servlet.jsp.tagext.*;public class Greeting extends TagSupport public int doS

45、tartTag() try pageContext.getOut().print(“Hello!”); catch (IOException e) e.printStackTrace(); return SKIP_BODY; public int doEndTag() try pageContext.getOut().print(“”); catch (IOException e) e.printStackTrace(); return EVAL_PAGE; 2022/9/28108標記處理器doStartTag()的兩個返回常量: 返回值EVAL_BODY_INCLUDE表示,JSP引擎要分

46、析標記的體內容和它所擁有的任何的子標記返回值SKIP_BODY表示,JSP引擎應該忽略體內容。注意,doStartTag()覆蓋了TagSupport()的該方法,會拋出JspTagException異常。2022/9/28109自定義標記doEndTag()方法可有兩個返回值:EVAL_PAGE和SKIP_PAGE。EVAL_PAGE會讓JSP引擎去分析頁面的其余的內容。SKIP_PAGE會終止頁面分析過程。2022/9/28110標記擴展目錄結構hello.jspWEB-INF/web.xmlclasses/tagext/HelloTag.classtlds/hello.tld 2022/

47、9/281112.8 JSP動作 向其他服務器對象傳輸控制權或執行操作主要包括:等2022/9/281122.8 JSP動作JSP 動作的作用實例化對象提高組件的可重用性,增強應用的可維護性與服務器端資源進行通信通過標記庫定義自定義標記2022/9/281132.8 JSP動作JSP 動作的語法JSP 動作標記遵循 XML 語言的語法起始標記結束標記空標記如: 2022/9/281142.8 JSP動作具有一個名稱具有前綴 jsp:用一對尖括號()括起來在尖括號內定義標記:起始標記 - 以元素的名稱開頭結束標記 - 以正斜線開頭,后面緊跟元素名稱空標記 - 以元素名稱開頭,以正斜線結束2022

48、/9/281152.8.1 jsp:include動作可將外部的靜態或者動態資源包括在當前頁面的輸出結果中,可包括Servlet動作語法如下: jsp:include page=relative URL flush=true / page 屬性要插入當前頁面的文檔flush 屬性是否刷新當前頁面的緩沖器,flush默認為false,應該置為ture,在當前的JSP實現里將flush屬性設成false是無效的 Request和session對象相同 標記指定附加的 request 參數2022/9/281162.8.1 jsp:include動作 String _jspx_qStr = “”;

49、out.flush(); pageContext.include(“included2.html” + _jspx_qStr);當包容器遇到這個標記時,就用預先定義的任務的 Java代碼來代替它。Servlet代碼JSP代碼如果include2.html的內容變化了,那么使用包含指令方式瀏覽器請求jsp頁面顯示的還是以前的內容,但是使用包含動作方式,瀏覽器請求jsp頁面顯示的就是新的內容。2022/9/281172.8.1 jsp:include動作include 指令和 include 動作的區別自動重新編譯和類大小靜態或動態內容的包括動作可以包含servlet等,因為它包含的是輸出結果而不是文本內容合并主頁和包括的頁面的時間動作在處理請求時才包含進來共享局部變量用動作時,在一個頁面中聲明的變量不可用于另一文件修改的生效用指令時,修改的生效需刷新頁面或去掉已經有的servlet變量的作用域用指令時注意變量名沖突2022/9/281182.8.1 jsp:include動作例子example2_19.jsp動態嵌入兩個文件hello1.txt和image.html, 運行結果如圖2-29所示 2022/9/281192.8.2 jsp:param動作標記 標記用于將附加 reque

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論