1,關於自定義標簽的幾個重要組成部分:
繼承的類:Javax.servlet.JSP.tagext.*:TagSupport
一個屬性: protected PageContext pageContext
兩個方法: public int DOStartTag()
public int doEndTag()
三個常量: SKIP_BODY,SKIP_PAGE,EVAL_PAGE
SKIP_PAGE,EVAL_PAGE是doEndTag()方法的返回值
標簽庫描述文件 (*.tld)
2,流程(工具:eclipse):
1.新建一個web project
2.在項目下新建一個包,包裡建類,繼承TagSupport
3.完成標簽處理類
package demo.tag;
import Javax.servlet.JSp.JSPException;
import Javax.servlet.JSP.*;
import Javax.servlet.JSP.tagext.TagSupport;
import Java.io.*;
//需要導入的幾個常用的包
@SuppressWarnings(\"serial\")
public class TagDemo extends TagSupport ...{
private int pageSize;//pageSize屬性,控制頁面顯示的個數,並且要生成get和set方法
public int getPageSize() ...{
return pageSize;
}
public void setPageSize(int pageSize) ...{
this.pageSize = pageSize;
}
// public int doEndTag() throws JSPException {
// 在這裡沒有用
// return super.doEndTag();
// }
public int DOStartTag() throws JSPException ...{
JSpWriter out = pageContext.getOut();//用pageContext獲取out,他還能獲取session等,基本上JSP的內置對象都能獲取,非常有用
for (int i=0; i
try ...{
out.println(\"
\");
out.println(\"\");
out.println(\"\"); [Page]
out.println(i);
out.println(\"\");
out.println(\"\");
out.println(i*10);
out.println(\"\");
out.println(\"\");
out.println(\"
\");
} catch (IOException e) ...{
e.printStackTrace();
}
}
return SKIP_BODY;
}
}
1. 標簽處理類應該繼承自TagSupport類
2. 標簽處理類應該覆蓋父類的至少一個方法 doStartTag() 或 doEndTag(),如果你覆蓋是DOStartTag()方法應該返回 SKIP_BODY, 如果你覆蓋是doEndTag()方法應該返回 SKIP_PAGE,EVAL_PAGE
3. 充分利用標簽處理類的pageContext屬性,可以通過該屬性獲取使用自定義標簽的JSP頁面的各種對象:
getOut(): 獲取JSP頁面的輸出流 out
getRequest: 獲取JSP頁面的請求對象 request
getSession: 獲取JSP頁面的會話對象 session
getServletContext: 獲取JSP頁面的應用對象 application [Page]
4. 如果我們要完成一個帶屬性自定義標簽,需要在標簽處理類聲明相關屬性
5.在WEB-INF下新建一個.tld文件完成標簽庫描述文件
PUBLIC \"-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN\"
\"http://Java.sun.com/J2EE(J2EE培訓 )/dtd/web-JSPtaglibrary_1_2.dtd\">
1.0
1.2
MyTagLib
showDataTag
demo.tag.TagDemo
pageSize
true
Integer
1. 標簽庫描述文件必須以 tld 為 文件的後綴名
2. 標簽庫描述文件應該遵守 XML 語法要求
3. 標簽庫描述文件的根元素 必須是
4. taglib根元素下必須完成以下四個子元素
tlib-version : JSP-version: short-name: 標簽庫描述文件的簡要說明,且只能出現一次
tag: 能出現一到多次 , 描述標簽庫中的標簽名及你要對應的標簽處理類
5. tag元素下出現的子元素:
name子元素:標簽名
tag-class子元素:對應的標簽處理類
attribute子元素:該標簽應包含的屬性
6. attribute元素下出現的子元素:
name:屬性名
required:該屬性名可不可省略
type:標簽處理類中相關屬性的類型
5.在web.XML引入標簽庫描述文件
[Page]
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
http://Java.sun.com/XML/ns/J2EE/web-app_2_4.xsd\">
index.JSP
MyFirstTag
/WEB-INF/MyTagLib.tld
1. 在web.XML中實現taglib元素的子元素:
taglib-location: 標簽庫描述文件在Web應用中的相對路徑
/WEB-INF/MyTagLib.tld
taglib-uri:該標簽庫在JSP中用什麼名字來調用
abc
2. 在要調用標簽庫的JSP中聲明
聲明:
調用: