java自定義標籤庫的開發
阿新 • • 發佈:2018-12-23
1. 建立實現了Tag介面(準確地說是 javax.servlet.jsp.tagext.Tag)的標籤處理程式類。
2. 建立一個 TLD 檔案。
3. 在標籤處理程式 Java 類中建立屬性。
4. 在 TLD 檔案中定義與標籤處理程式 Java 類中定義的屬性對應的屬性。
5. 在 TLD 檔案中宣告 scriptlet 變數。
6. 實現 doStartTag() 方法。在標籤處理程式類中,根據屬性將值設定到 scriptlet 變數中。
在jsp1.2時代已經有標記庫了, 並且功能強大,但標記庫的程式設計和呼叫都比較複雜,導致真正使用到WEB開發中的還是不多。JSP2.0推出的簡單標記庫擴充套件解決了以上的問題。簡單標記庫相對JSP1.2中的標記庫來說,優點在於對後臺程式設計師來說,結構更簡單,實現介面更少,可以輕鬆實現後臺程式。
JSP 2.0中加入了新的建立自制標記的API:javax.servlet.jsp.tagext.SimpleTag,該API定義了用來實現簡單標記的介面。和JSP 1.2中的已有介面不同的是,SimpleTag介面不使用doStartTag()和doEndTag()方法,而提供了一個簡單的doTag()方法。這個方法在呼叫該標記時只被使用一次。而需要在一個自制標記中實現的所有邏輯過程、迴圈和對標記體的評估等都在這個方法中實現。從這個方面來講,SimpleTag可以和IterationTag達到同等的作用。但SimpleTag的方法和處理週期要簡單得多。在SimpleTag中還有用來設定JSP內容的setJspBody()和getJspBody()方法。Web容器會使用setJspBody()方法定義一個代表JSP內容的JspFragment物件。實現SimpleTag標記的程式可以在doTag方法中根據需要多次呼叫getJspBody().invoke()方法以處理JSP內容。
自定義標籤的分類:
(1)不帶主體和屬性的簡單標籤:如< mytag:helloworld/>
(2)不帶主體但有屬性的標籤:如<imytag:checkinput dbname = “<myBean.getDBName()>”/>
(3)帶標籤體和屬性的標籤:在自定義標籤的起始和結束標籤之間的部分為標籤體(Body)。Body的內容可以是JSP中的標準標籤,也可以是HTML、指令碼語言或其他的自定義標籤。
<mytag:checkinput dbname ="<myBean.getDBName()>">
<mytag:log message="Table Name">
<mytag:checkinput />
(4使用指令碼變數的標籤:
定義了id和type屬性的標籤可以被標籤後面的Scriptlet使用。
<mytag:connection id = "sqlDB" type ="DataSource" name ="SQL_Server">
<%sqlDB.getConnection(); %>
2. 建立一個 TLD 檔案。
3. 在標籤處理程式 Java 類中建立屬性。
4. 在 TLD 檔案中定義與標籤處理程式 Java 類中定義的屬性對應的屬性。
5. 在 TLD 檔案中宣告 scriptlet 變數。
6. 實現 doStartTag() 方法。在標籤處理程式類中,根據屬性將值設定到 scriptlet 變數中。
在jsp1.2時代已經有標記庫了, 並且功能強大,但標記庫的程式設計和呼叫都比較複雜,導致真正使用到WEB開發中的還是不多。JSP2.0推出的簡單標記庫擴充套件解決了以上的問題。簡單標記庫相對JSP1.2中的標記庫來說,優點在於對後臺程式設計師來說,結構更簡單,實現介面更少,可以輕鬆實現後臺程式。
JSP 2.0中加入了新的建立自制標記的API:javax.servlet.jsp.tagext.SimpleTag,該API定義了用來實現簡單標記的介面。和JSP 1.2中的已有介面不同的是,SimpleTag介面不使用doStartTag()和doEndTag()方法,而提供了一個簡單的doTag()方法。這個方法在呼叫該標記時只被使用一次。而需要在一個自制標記中實現的所有邏輯過程、迴圈和對標記體的評估等都在這個方法中實現。從這個方面來講,SimpleTag可以和IterationTag達到同等的作用。但SimpleTag的方法和處理週期要簡單得多。在SimpleTag中還有用來設定JSP內容的setJspBody()和getJspBody()方法。Web容器會使用setJspBody()方法定義一個代表JSP內容的JspFragment物件。實現SimpleTag標記的程式可以在doTag方法中根據需要多次呼叫getJspBody().invoke()方法以處理JSP內容。
自定義標籤的分類:
(1)不帶主體和屬性的簡單標籤:如< mytag:helloworld/>
(2)不帶主體但有屬性的標籤:如<imytag:checkinput dbname = “<myBean.getDBName()>”/>
(3)帶標籤體和屬性的標籤:在自定義標籤的起始和結束標籤之間的部分為標籤體(Body)。Body的內容可以是JSP中的標準標籤,也可以是HTML、指令碼語言或其他的自定義標籤。
<mytag:checkinput dbname ="<myBean.getDBName()>">
<mytag:log message="Table Name">
<mytag:checkinput />
(4使用指令碼變數的標籤:
定義了id和type屬性的標籤可以被標籤後面的Scriptlet使用。
<mytag:connection id = "sqlDB" type ="DataSource" name ="SQL_Server">
<%sqlDB.getConnection(); %>