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/>
好了,现在就可以运行;
如有不对之处,欢迎指正,转载贴上原文链接即可,谢谢!