在JSP中使用自訂標籤可以達到這樣的目的,事實上,我們所熟知的各類架構基本上都是通過自訂標籤的形式來實現的。
通過使用自訂標籤,我們可以將實現複雜的邏輯在頁面用簡單的標籤來加以展示。下面我們來實現一個非常簡單的自訂標籤,期望通過這個簡單的執行個體引領各位進入自訂標籤的領域。我們準備定義的這個自訂標籤所實現的功能是在JSP頁面中顯示出著作權資訊,並且在以後的博文中,我們還會對它進行升級改造。
首先,開啟編輯器,建立以下Java代碼:
複製代碼 代碼如下:
package com.yanzhijun;
import java.io.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
public class CopyRightTag extends TagSupport
{
public int doEndTag()
{
try
{
String copyPre = "顏志軍著作權 ©2008";
String info = new String(copyPre.getBytes(), "ISO8859_1");
pageContext.getOut().println(info);
}
catch(IOException e){}
return EVAL_PAGE;
}
}
上述代碼編輯完成後,編譯並產生class檔案。並將編譯之後的位元組碼檔案連同包名一同放入準備使用當前標籤的WEB應用的WEB-INF\classes目錄之下。例如WEB應用在名為test的目錄之下,則將上述代碼編譯時間產生的com目錄全部拷貝至test\WEB-INF\classes之下即可。
注意:在編譯上述代碼時,如果不是在整合的環境中進行,例如直接在命令列通過執行javac命令進行編譯工作,那麼需要手工在環境變數CLASSPATH中添加包javax.servlet.jsp所在的位置,對於Tomcat而言,這個包的位置是Tomcat安裝目錄下lib目錄中的jsp-api.jar。
隨後將以下XML格式的檔案存入到名為testlib.tld的檔案中,檔案testlib.tld要儲存於目錄WEB-INF\tlds之下。
複製代碼 代碼如下:
<?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>yzj</shortname>
<tag>
<name>copyright</name>
<tagclass>com.yanzhijun.CopyRightTag</tagclass>
<bodycontent>empty</bodycontent>
<attribute/>
</tag>
</taglib>
至此,我們已經完成了一個自訂標籤,隨後我們就可以在JSP檔案中對其進行使用了。例如有如下JSP檔案:
複製代碼 代碼如下:
<%@ taglib uri="WEB-INF/tlds/testlib.tld" prefix="yzj" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>自訂標籤簡單樣本</title>
</head>
<body>
<p>這裡是本文內容</p>
<yzj:copyright/>
</body>
</html>
在瀏覽器中訪問該JSP檔案,可以看到,在頁面底部,顯示了“顏志軍著作權 ©2008”的資訊,這正是我們定義的這個自己定義標籤的作用。
通過上面的過程,已經實現了自訂標籤,並對其進行使用測試。關於其原理、機制、要注意的細節等問題,在請等待隨後的博文。