自定義標簽是用戶定義的JSP語言元素。當JSP頁面包含一個自定義標簽時將被轉化為servlet,標簽轉化為對被 稱為tag handler的對象的操作,即當servlet執行時Web container調用那些操作。
JSP標簽擴展可以讓你創建新的標簽并且可以直接插入到一個JSP頁面。 JSP 2.0規范中引入Simple Tag Handlers來編寫這些自定義標記。
你可以繼承SimpleTagSupport類并重寫的doTag()方法來開發一個最簡單的自定義標簽。
創建"Hello"標簽
接下來,我們想創建一個自定義標簽叫作<ex:Hello>,標簽格式為:
<ex:Hello />
要創建自定義的JSP標簽,你首先必須創建處理標簽的Java類。所以,讓我們創建一個HelloTag類,如下所示:
package com.runoob;
import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;
import java.io.*;
public class HelloTag extends SimpleTagSupport {
public void doTag() throws JspException, IOException {
JspWriter out = getJspContext().getOut();
out.println("Hello Custom Tag!");
}
}
以下代碼重寫了doTag()方法,方法中使用了getJspContext()方法來獲取當前的JspContext對象,并將"Hello Custom Tag!"傳遞給JspWriter對象。
編譯以上類,并將其復制到環境變量CLASSPATH目錄中。最后創建如下標簽庫:<Tomcat安裝目錄>webapps\ROOT\WEB-INF\custom.tld。
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>2.0</jsp-version>
<short-name>Example TLD</short-name>
<tag>
<name>Hello</name>
<tag-class>com.runoob.HelloTag</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
接下來,我們就可以在JSP文件中使用Hello標簽:
<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%>
<html>
<head>
<title>A sample custom tag</title>
</head>
<body>
<ex:Hello/>
</body>
</html>
以上程序輸出結果為:
Hello Custom Tag!
訪問標簽體
你可以像標準標簽庫一樣在標簽中包含消息內容。如我們要在我們自定義的Hello中包含內容,格式如下:
<ex:Hello>
This is message body
</ex:Hello>
我們可以修改標簽處理類文件,代碼如下:
package com.runoob;
import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;
import java.io.*;
public class HelloTag extends SimpleTagSupport {
StringWriter sw = new StringWriter();
public void doTag()
throws JspException, IOException
{
getJspBody().invoke(sw);
getJspContext().getOut().println(sw.toString());
}
}
接下來我們需要修改TLD文件,如下所示:
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>2.0</jsp-version>
<short-name>Example TLD with Body</short-name>
<tag>
<name>Hello</name>
<tag-class>com.runoob.HelloTag</tag-class>
<body-content>scriptless</body-content>
</tag>
</taglib>
現在我們可以在JSP使用修改后的標簽,如下所示:
<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%>
<html>
<head>
<title>A sample custom tag</title>
</head>
<body>
<ex:Hello>
This is message body
</ex:Hello>
</body>
</html>
以上程序輸出結果如下所示:
This is message body
自定義標簽屬性
你可以在自定義標準中設置各種屬性,要接收屬性,值自定義標簽類必須實現setter方法, JavaBean 中的setter方法如下所示:
package com.runoob;
import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;
import java.io.*;
public class HelloTag extends SimpleTagSupport {
private String message;
public void setMessage(String msg) {
this.message = msg;
}
StringWriter sw = new StringWriter();
public void doTag()
throws JspException, IOException
{
if (message != null) {
/* 從屬性中使用消息 */
JspWriter out = getJspContext().getOut();
out.println( message );
}
else {
/* 從內容體中使用消息 */
getJspBody().invoke(sw);
getJspContext().getOut().println(sw.toString());
}
}
}
屬性的名稱是"message",所以setter方法是的setMessage()。現在讓我們在TLD文件中使用的<attribute>元素添加此屬性:
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>2.0</jsp-version>
<short-name>Example TLD with Body</short-name>
<tag>
<name>Hello</name>
<tag-class>com.runoob.HelloTag</tag-class>
<body-content>scriptless</body-content>
<attribute>
<name>message</name>
</attribute>
</tag>
</taglib>
現在我們就可以在JSP文件中使用message屬性了,如下所示:
<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%>
<html>
<head>
<title>A sample custom tag</title>
</head>
<body>
<ex:Hello message="This is custom tag" />
</body>
</html>
以上實例數據輸出結果為:
This is custom tag
你還可以包含以下屬性:
屬性 | 描述 |
---|---|
name | 定義屬性的名稱。每個標簽的是屬性名稱必須是唯一的。 |
required | 指定屬性是否是必須的或者可選的,如果設置為false為可選。 |
rtexprvalue | 聲明在運行表達式時,標簽屬性是否有效。 |
type | 定義該屬性的Java類類型 。默認指定為 String |
description | 描述信息 |
fragment | 如果聲明了該屬性,屬性值將被視為一個 JspFragment。 |
以下是指定相關的屬性實例:
.....
<attribute>
<name>attribute_name</name>
<required>false</required>
<type>java.util.Date</type>
<fragment>false</fragment>
</attribute>
.....
如果你使用了兩個屬性,修改TLD文件,如下所示:
.....
<attribute>
<name>attribute_name1</name>
<required>false</required>
<type>java.util.Boolean</type>
<fragment>false</fragment>
</attribute>
<attribute>
<name>attribute_name2</name>
<required>true</required>
<type>java.util.Date</type>
</attribute>
.....
如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!
覽器支持
所有主流瀏覽器都支持 <a> 標簽。
標簽定義及使用說明
<a> 標簽定義超鏈接,用于從一個頁面鏈接到另一個頁面。
<a> 元素最重要的屬性是 href 屬性,它指定鏈接的目標。
在所有瀏覽器中,鏈接的默認外觀如下:
未被訪問的鏈接帶有下劃線而且是藍色的
已被訪問的鏈接帶有下劃線而且是紫色的
活動鏈接帶有下劃線而且是紅色的
提示和注釋
提示:如果沒有使用 href 屬性,則不能使用 hreflang、media、rel、target 以及 type 屬性。
提示:通常在當前瀏覽器窗口中顯示被鏈接頁面,除非規定了其他 target。
提示:請使用 CSS 來改變鏈接的樣式。
HTML 4.01 與 HTML5之間的差異
在 HTML 4.01 中,<a> 標簽既可以是超鏈接,也可以是錨。在 HTML5 中,<a> 標簽是超鏈接,但是假如沒有 href 屬性,它僅僅是超鏈接的一個占位符。
HTML5 有一些新的屬性,同時不再支持一些 HTML 4.01 的屬性。
屬性
New :HTML5 中的新屬性。
屬性 | 值 | 描述 |
---|---|---|
charset | char_encoding | HTML5 不支持。規定目標 URL 的字符編碼。 |
coords | coordinates | HTML5 不支持。規定鏈接的坐標。 |
downloadNew | filename | 指定下載鏈接 |
href | URL | 規定鏈接的目標 URL。 |
hreflang | language_code | 規定目標 URL 的基準語言。僅在 href 屬性存在時使用。 |
mediaNew | media_query | 規定目標 URL 的媒介類型。默認值:all。僅在 href 屬性存在時使用。 |
name | section_name | HTML5 不支持。規定錨的名稱。 |
rel | alternateauthorbookmarkhelplicensenextnofollownoreferrerprefetchprevsearchtag | 規定當前文檔與目標 URL 之間的關系。僅在 href 屬性存在時使用。 |
rev | text | HTML5 不支持。規定目標 URL 與當前文檔之間的關系。 |
shape | defaultrectcirclepoly | HTML5 不支持。規定鏈接的形狀。 |
target | _blank_parent_self_topframename | 規定在何處打開目標 URL。僅在 href 屬性存在時使用。 |
typeNew | MIME_type | 規定目標 URL 的 MIME 類型。僅在 href 屬性存在時使用。注:MIME = Multipurpose Internet Mail Extensions。 |
全局屬性
<a> 標簽支持 HTML 的全局屬性。
事件屬性
<a> 標簽支持 HTML 的事件屬性。
創建超級鏈接
本例演示如何在 HTML 文檔中創建鏈接。
將圖像作為鏈接
本例演示如何使用圖像作為鏈接。
在新的瀏覽器窗口打開鏈接
本例演示如何在新窗口打開一個頁面,這樣的話訪問者就無需離開您的站點了。
創建電子郵件鏈接
本例演示如何鏈接到一個郵件。(本例在安裝郵件客戶端程序后才能工作。)
創建電子郵件鏈接 2
本例演示更加復雜的郵件鏈接。
使用錨跳轉到同一個頁面的不同位置
本例演示如何使用錨的 id 屬性跳轉到頁面的不同位置( HTML5 不支持 name 屬性)
如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!
例
使用 <summary> 元素:
<details>
<summary>Copyright 1999-2011.</summary>
<p> - by Refsnes Data. All Rights Reserved.</p>
<p>All content and graphics on this web site are the property of the company Refsnes Data.</p>
</details>
瀏覽器支持
目前,只有 Chrome 和 Safari 6 支持 <summary> 標簽。
標簽定義及使用說明
<summary> 標簽為 <details> 元素定義一個可見的標題。 當用戶點擊標題時會顯示出詳細信息。
HTML 4.01 與 HTML5之間的差異
<summary> 標簽是 HTML5 中的新標簽。
提示和注釋
注釋:<summary> 元素應該是 <details> 元素的第一個子元素。
全局屬性
<summary> 標簽支持 HTML 的全局屬性。
事件屬性
<summary> 標簽支持 HTML 的事件屬性。
如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!
*請認真填寫需求信息,我們會在24小時內與您取得聯系。