自定義標籤的目的:以簡單的標籤,隱藏複雜的邏輯。
使用自定義標籤配置過程:
1. 在對應的web應用下,配置.tld文件,如${webapp}/WEB-INF/tlds/mytaglib.tld,新建tag標籤如下:
<tag>
<!--自定義標籤名-->
<name>helloWorld</name>
<!--自定義標籤處理類-->
<tag-class>domain.HelloWorldTag</tag-class>
<!--自定義標籤體爲空-->
<body-content>empty</body-content>
</tag>
2. 在web.xml文件中配置標籤庫信息,這個配置是爲了web容器可以定位TLD文件的位置
<jsp-config>
<taglib>
<taglib-uri>/mytaglib</taglib-uri>
<taglib-location>/WEB-INF/tlds/mytaglib.tld</taglib-location>
</taglib>
</jsp-config>
其中,<jsp-config>用於爲web應用中的JSP文件提供全局配置信息;<taglib>用於指定JSP頁面使用的標籤庫信息;
兩個子元素,<taglib-uri>元素指定在web應用程序中使用的標籤庫的URI標識,JSP頁面的taglib指令通過這個uri
讀取到tld文件;<taglib-location>指定TLD文件的位置。
3. 創建自定義標籤處理類,必須繼承父類javax.servlet.jsp.tagext.SimpleTagSupport,兩個要求:(1)如果標籤類包含屬性,每個屬性要有對應的getter和setter方法;(2)重寫doTag()方法,這個方法負責生成頁面內容
public class HelloWorldTag extends SimpleTagSupport
{
//複寫的doTag方法,標籤實際處理方法,生成自定義的頁面內容
public void doTag()
throws IOException
{
//獲取頁面輸出流,並輸出字符串
getJspContext().getOut().write("Hello World " + new java.util.Date());
}
}
注意,在編譯時,需要將%CATALINA_HOME%/lib/jsp-api.jar包添加到環境變量CLASSPATH中,這樣編譯時才能找到處理包,
否則會報錯。
4. 頁面中引用該自定義標籤
<%@ taglib uri="/mytaglib" prefix="mytag" %>
<html>
<head>
<title>自定義標籤示範</title>
</head>
<body bgcolor="#ffffc0">
<h2>下面顯示的是自定義標籤中內容</h2>
<!--使用標籤,其中mytag是標籤前綴,根據taglib的編譯指令,
mytag前綴由/mytaglib的標籤庫處理-->
<mytag:helloWorld /><br/>
</body>
</html>
通過以上操作步驟,啓動服務器,執行結果如下(這個導入圖片真扯,只能把內容貼過來了,難道是我不會用???):
下面顯示的是自定義標籤中內容
Hello World Sun Mar 09 15:04:23 CST 2014
總結:以上自定義標籤的demo的整體運行過程是,用戶請求該頁面(mytag.jsp),讀取到自定義標籤
<%@ taglib uri="/mytaglib" prefix="mytag" %>,web應用到web.xml文件中根據uri標識符定位
到標籤庫(mytaglib.tld)的具體位置,然後根據標籤名稱helloWorld定爲到具體的標籤,
在標籤中指定標籤處理類,根據標籤處理類的處理內容展現頁面結果。