一、基本概念
1、标簽(Tag)
标簽是一種XML元素,通過标簽可以使JSP網頁變得簡潔并且易于維護,還可以友善地實作同一個JSP檔案支援多種語言版本。由于标簽是XML元素,是以它的名稱和屬性都是大小寫敏感的。
2、标簽庫(Tag library)
由一系列功能相似、邏輯上互相聯系的标簽構成的集合稱為标簽庫。
3、标簽庫描述檔案(Tag Library Descriptor)
标簽庫描述檔案是一個XML檔案,這個檔案提供了标簽庫中類和JSP中對标簽引用的映射關系。它是一個配置檔案,和web.xml是類似的。
4、标簽處理類(Tag Handle Class)
标簽處理類是一個Java類,這個類繼承了TagSupport或者擴充了SimpleTag接
口,通過這個類可以實作自定義JSP标簽的具體功能。
二 标簽開發
1.簡單的标簽開發
1.1 寫處理類
1
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-YWan5CNiRTNhRmZhFDMmhzYxUTZjVWZkNmY4YWM5MWZ0UWOw8CX0AzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLzM3Lc9CX6MHc0RHaiojIsJye.gif)
1package com.dongjj.tag;
2
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-YWan5CNiRTNhRmZhFDMmhzYxUTZjVWZkNmY4YWM5MWZ0UWOw8CX0AzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLzM3Lc9CX6MHc0RHaiojIsJye.gif)
3
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-YWan5CNiRTNhRmZhFDMmhzYxUTZjVWZkNmY4YWM5MWZ0UWOw8CX0AzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLzM3Lc9CX6MHc0RHaiojIsJye.gif)
3import javax.servlet.jsp.JspException;
4
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-YWan5CNiRTNhRmZhFDMmhzYxUTZjVWZkNmY4YWM5MWZ0UWOw8CX0AzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLzM3Lc9CX6MHc0RHaiojIsJye.gif)
4import javax.servlet.jsp.PageContext;
5
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-YWan5CNiRTNhRmZhFDMmhzYxUTZjVWZkNmY4YWM5MWZ0UWOw8CX0AzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLzM3Lc9CX6MHc0RHaiojIsJye.gif)
5import javax.servlet.jsp.tagext.Tag;
6
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-YWan5CNiRTNhRmZhFDMmhzYxUTZjVWZkNmY4YWM5MWZ0UWOw8CX0AzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLzM3Lc9CX6MHc0RHaiojIsJye.gif)
7
7public class TimeTag implements Tag
{
8
8 protected PageContext pageContext;
9
9 private Tag parent;
10
11
11 // ----标簽開始時調用此方法-------
12
12 public int doStartTag() throws JspException
13
13 try
14
14 pageContext.getOut().println("Now:" + new java.util.Date());
15
15 } catch (Exception e)
16
16 throw new JspException(e.getMessage());
17
17 }
18
18 return SKIP_BODY;
19
19 }
20
21
21 // ----标簽結束時調用此方法-------
22
22 public int doEndTag() throws JspException
23
23 return EVAL_PAGE;
24
24 }
25
26
26 // 實作
27
27 public void release()
28
28 }
29
30
30 // 實作
31
31 public void setPageContext(PageContext pageContext)
32
32 this.pageContext = pageContext;
33
33 }
34
35
35 // 實作
36
36 public Tag getParent()
37
37 return parent;
38
38 }
39
40
40 // 實作
41
41 public void setParent(Tag parent)
42
42 this.parent = parent;
43
43 }
44
45
45}
1.2 編寫tld檔案 放在WEB-INF目錄下
Code
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"
version="2.0">
<!-- 标簽庫版本-->
<tlib-version>1.1</tlib-version>
<!-- 标簽庫名稱-->
<short-name>fn</short-name>
<!-- 标簽庫URI-->
<uri>
<tag>
<!-- 标簽名稱-->
<name>time</name>
<!-- 标簽對應的處理類-->
<tag-class>com.allanlxf.tag.TimeTag</tag-class>
<!-- 标簽體内容,沒有标簽體則設為empty-->
<body-content>empty</body-content>
</tag>
</taglib>
1.3 在在Web應用的web.xml檔案中聲明标簽庫引用 web.xml version="2.4"的不用引入也可,能在路徑下搜尋
1
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-YWan5CNiRTNhRmZhFDMmhzYxUTZjVWZkNmY4YWM5MWZ0UWOw8CX0AzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLzM3Lc9CX6MHc0RHaiojIsJye.gif)
<taglib>
2
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-YWan5CNiRTNhRmZhFDMmhzYxUTZjVWZkNmY4YWM5MWZ0UWOw8CX0AzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLzM3Lc9CX6MHc0RHaiojIsJye.gif)
<taglib-uri>
3
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-YWan5CNiRTNhRmZhFDMmhzYxUTZjVWZkNmY4YWM5MWZ0UWOw8CX0AzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLzM3Lc9CX6MHc0RHaiojIsJye.gif)
<taglib-location>/WEB-INF/mytags.tld</taglib-location>
4
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-YWan5CNiRTNhRmZhFDMmhzYxUTZjVWZkNmY4YWM5MWZ0UWOw8CX0AzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLzM3Lc9CX6MHc0RHaiojIsJye.gif)
</taglib>
5
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-YWan5CNiRTNhRmZhFDMmhzYxUTZjVWZkNmY4YWM5MWZ0UWOw8CX0AzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLzM3Lc9CX6MHc0RHaiojIsJye.gif)
<taglib-uri>對應tld檔案中的<uri>,<taglib-location>指出tld檔案的位置
1.4 寫jsp
<%
@taglib uri=prefix="mt"%>
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-YWan5CNiRTNhRmZhFDMmhzYxUTZjVWZkNmY4YWM5MWZ0UWOw8CX0AzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLzM3Lc9CX6MHc0RHaiojIsJye.gif)
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-YWan5CNiRTNhRmZhFDMmhzYxUTZjVWZkNmY4YWM5MWZ0UWOw8CX0AzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLzM3Lc9CX6MHc0RHaiojIsJye.gif)
<h1 align="center"><mt:time/></h1>
調用 在頁面上顯示如下
Now:Tue Mar 24 16:33:50 CST 2009