JSP中使用Taglib

  標準的JSP標記可以調用JavaBeans組件或者執行客戶的請求,這大大降低了JSP開發的複雜度和維護量。JSP技術也允許你自定義的taglib,其實換句話說,taglib可以看成是對JSP標記的一種擴展,正如xml是對html的一種擴展一樣。taglib通常定義在tag標籤庫中,這種標籤庫存放着你自己定義的tag標籤。簡而言之,如果使用taglib,那麼你可以設計自己的JSP標記。

        一般來說,自定義tag標籤主要用於操作隱藏對象、處理html提交的表單、訪問數據庫或其他企業級的服務,諸如郵件和目錄操作等等。自定義tag標籤的使用者一般都是那些對java編程語言非常精通,而且對數據訪問和企業級服務都非常熟悉的程序員,對於HTML設計者來說,使得他可以不去關注那些較複雜的商業邏輯,而將精力放在網頁設計上。同時,它也將庫開發者和庫使用者進行合理分工,自定義tag標籤將那些重複工作進行封裝,從而大大提高了生產力,而且可以使得tag庫可用於不同的項目中,完美地體現了軟件複用的思想。

Taglib指令:定義一個標籤庫,以及其自定義標籤的前綴。

 

JSP中使用Taglib,用兩種方法,這裏將兩種方法說明如下:

一、僅聲明TLD(標籤庫描述符)的位置

在jsp文件頭部,聲明:

<%@taglib uri="/WEB-INF/tlds/orataglib_1_0.tld" prefix="ora" %>

舉例:在MyEclipse中新建一Web工程,取名爲HelloWorldTag。新建一包,包名爲mytag

(1)在mytag下,新建一Java類,內容如下:

package mytag;  
import java.io.IOException;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
public class HelloWorldTag extends TagSupport{
      public int doStartTag() throws JspTagException{
          return EVAL_BODY_INCLUDE;
      }
      public int doEndTag() throws JspTagException{
      try{
              pageContext.getOut().write("Hello World");
          } catch (IOException ex){
               throw new JspTagException("Error!");
          }
      return EVAL_PAGE;
      }
}

(2)在WEB-INF下新建一目錄,目錄名爲tlds,下tlds下面新建一tld文件,命名爲hello.tld,內容如下:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib
          PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
      "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
    <tlibversion>1.0</tlibversion>
    <jspversion>1.1</jspversion>
    <shortname>myTag</shortname>  
      <tag>
          <name>hello</name>
          <tagclass>mytag.HelloWorldTag</tagclass> 
         <bodycontent>empty</bodycontent>
     </tag>
</taglib>

(3)修改index.jsp頁面代碼,修改內容如下:

<%@ page language="java"%>
<%@ taglib uri="/WEB-INF/tlds/hello.tld" prefix="mytag"%>
<html>
<body>
<mytag:hello></mytag:hello>
</body>
</html>
(4)運行:在瀏覽器中輸入http://localhost:8082/HelloWorldtag/index.jsp
運行結果爲:Hello World
解釋:
<mytag:hello></mytag:hello>的作用就是在標籤結束後調用了doEndTag() 方法,打印出Hello World
二、定義庫名稱
這裏就不再詳細描述了。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章