1.标記處理器;(自定義标記發生時的處理動作,一般是實作了javax.servlet.jsp.tagext包的Tag或BodyTag接口的類)
2.标記庫描述檔案;(是一個tld字尾的的檔案)【TLD,顧名思義:taglib description】
3.在web.xml中定義要定位的tld檔案位置
4.在JSP中使用taglib(<%@taglib uri="tagLibraryURI" prefix="tagPrefix"%>)
下面是我在操作步驟,與遇到的一些問題:
我是先做的第二步然後再做的第一步寫的實作類。
a)建立文本文檔,字尾.tld,位置(WEB-INF/tlds/hello.tld)【路徑中的檔案夾還有檔案是建立的】
hello.tld 内容如下:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd"><taglib>
<tlibversion>1.0</tlibversion><!-- 标記庫版本号,N.N.N.N 形式,不能省略第一個N -->
<jspversion>1.1</jspversion><!-- 與該标記庫相容的JSP規範版本号,預設為1.1 -->
<shortname>mine</shortname><!-- 标記庫預設明明空間字首,一般與taglib指令中的prefix字首一緻,個人覺得沒必要做太明确的要求,畢竟用标記的時候,很少有人會看定義,都是自己定義字首的-->
<info>标記庫描述資訊</info><!-- 标記庫的描述資訊 -->
<!-- 其中shortname與tlibversion是必須的 -->
<tag>
<name>hello</name><!-- 标記名稱/jsp使用時的名稱 -->
<tagclass>com.fsh.practice_001_JSP.HelloTag</tagclass><!-- 此為标記的處理類 -->
<bodycontent>empty</bodycontent><!-- 取值有三:JSP;empty;tagdependent;分别表示Servlet容器對體内容求值;主體必須為空;由标記處理程式對體内容求值; -->
<info>Just Says Hello</info><!-- 标記的描述資訊 -->
</tag>
</taglib>
b)實作類HelloTag内容如下:
package com.fsh.practice_001_JSP;
import java.io.IOException;
import java.util.Date;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.tagext.*;
public class HelloTag extends TagSupport{
/**
*
*/
private static final long serialVersionUID = -2180087106968634833L;
@Override
public int doEndTag() throws JspException {
String dateString = new Date().toString();
try{
pageContext.getOut().write("HelloWorld.<br/>");
pageContext.getOut().write("My name is:"+getClass().getName()
+"and it's " + dateString + "<p/>");
}catch(IOException ex){
throw new JspTagException("Fatal error:hello tag could not write to JSP out");
}
return EVAL_PAGE;
}
@Override
public int doStartTag() throws JspException {
return EVAL_BODY_INCLUDE;
}
}
c)在web.xml中的定義:(這裡有一個需要注意的地方就是版本,2.4以後都是需要在<jsp-config>标簽中定義,2.3應該是 不需要的,直接使用<taglib>标簽就好)
<!-- 增加taglib自定義檔案 增加了新的文法規則,就是jsp-config-->
<jsp-config>
<taglib>
<taglib-uri>/hello</taglib-uri>
<taglib-location>/WEB-INF/tlds/hello.tld</taglib-location>
</taglib>
</jsp-config>
d)在JSP中使用:
<%@ taglib uri="/hello" prefix="mineTest"%>
<mineTest:hello/>
好了,現在就可以運作;
如有不對之處,歡迎指正,轉載貼上原文連結即可,謝謝!