BodyTagSupport與TagSupport自定義標籤
阿新 • • 發佈:2018-11-20
BodyTagSupport與TagSupport的區別在於,BodyTagSupport標籤處理類與標籤體進行互動,TagSupport標籤處理類不與標籤體進行互動,因為BodyTagSupport是TagSupport的子類,所以用TagSupport實現的都可以用BodyTagSupport實現.
--下面就讓我們來看一下自定義標籤的編寫流程
首先我們需要在編寫工具(小白用的是eclipse)+tomcat服務容器,建立這些東西:一個java的類,一個.tld的標籤庫檔案,還有一個jsp頁面
有了這些後,我們就可以來研究一下標籤的自定義過程
首先我們先開啟.tld這個標籤庫檔案,並進行設定
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<!-- 標籤庫描述符 -->
<taglib xmlns="http://java.sun.com/JSP/TagLibraryDescriptor">
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>Simple Tags</short-name>
<uri>/outtag</uri>
<tag>
<!-- 標籤名 -->
<name>out</name>
<!-- 標籤助手類 -->
<tag-class>com.zking.outtag.OutTag</tag-class>
<!-- 標籤的內容型別:empty表示空標籤(使用空標籤會報錯),jsp表示可以為任何合法的JSP元素 -->
<body-content>JSP</body-content>
<!--屬性設定(可以不設定屬性)-->
<attribute>
<!--屬性名字-->
<name>value</name>
<!--是否為必須屬性-->
<required>true</required>
<!--是否可以使用表示式,如:EL表示式-->
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
根據以上的自定義標籤的設定,我們就得到了一個名字叫out的一個標籤,out的標籤內必須要有屬性value,並且可以使用表示式
然後jsp頁面使用我們自己定義的標籤
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="o" uri="/outtag"%>
<!-- 這裡的uri應該與.tld檔案中的uri所對應 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>自定義標籤</title>
</head>
<body>
<!-- 標籤名:out,屬性:value ,最後達到頁面輸出結果:123-->
<o:out value="123"></o:out>
</body>
</html>
那麼問題來了,這個value的值是怎麼樣輸出來的呢?,為什麼會被輸出呢?
所以,問題的答案追溯到我們的Java的類(標籤助手類)中來解答吧?
package com.zking.outtag;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;
/*繼承了BodyTagSupport*/
public class OutTag extends BodyTagSupport{
//對應的屬性---value
private Object value;
/*
* 無參有返回構造方法
*/
public Object getValue() {
return value;
}
/*
* set方法
*/
public void setValue(Object value) {
this.value = value;
}
/*
* 開始執行jsp檔案對應的<o:out value="123">
*/
public int doStartTag() throws JspException {
/*
* pageContext一個請求域,通過請求域與jsp達到一個連線的作用
* 這也就是value值能否顯示的原因
*/
try {
pageContext.getOut().print(value);
} catch (IOException e) {
e.printStackTrace();
}
/*
* 返回的值
* EVAL_BODY_INCLUDE(執行出標籤體包含的值,也就是開籤與閉籤之間的值)
* SKIP_BODY (跳過標籤體,直接執行到閉籤處)
*/
return SKIP_BODY;
}
/*
* 開始執行jsp檔案對應的</o:out>
*/
public int doEndTag() throws JspException {
/*
* 返回的值
* EVAL_PAGE(繼續執行下面內容,也就是說從該標籤開始,下面的所有內容都能執行)
* SKIP_PAGE(從該標籤開始,跳過下面全部內容,直接執行到</html>標籤)
*/
return SKIP_PAGE;
}
}
我們寫出的這個標籤可以使用EL表示式${}和小指令碼<%%>哦~
以上就是小白簡單的介紹了一下自定義標籤的設定過程,如果看懂了就試一下編寫一個屬於自己的標籤吧~