初涉“标签库(Tag Library)”,以一个简单的hello标签开演示开发自定义标签的基本步骤:
一、新建一个包test,包中新建一个标签类HelloTag.java,代码如下:
package
test;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.Tag;
public class HelloTag implements Tag ... {
private PageContext pageContext;
private Tag parent;
public int doEndTag() throws JspException ...{
JspWriter out = pageContext.getOut();
try...{
out.println("欢迎来到琉璃仙境.");
}catch(IOException e)...{
System.err.println(e.toString());
}
return EVAL_PAGE;
}
public int doStartTag() throws JspException ...{
return SKIP_BODY;
}
public Tag getParent() ...{
return parent;
}
public void release() ...{
}
public void setPageContext(PageContext arg0) ...{
this.pageContext = arg0;
}
public void setParent(Tag arg0) ...{
this.parent = arg0;
}
}
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.Tag;
public class HelloTag implements Tag ... {
private PageContext pageContext;
private Tag parent;
public int doEndTag() throws JspException ...{
JspWriter out = pageContext.getOut();
try...{
out.println("欢迎来到琉璃仙境.");
}catch(IOException e)...{
System.err.println(e.toString());
}
return EVAL_PAGE;
}
public int doStartTag() throws JspException ...{
return SKIP_BODY;
}
public Tag getParent() ...{
return parent;
}
public void release() ...{
}
public void setPageContext(PageContext arg0) ...{
this.pageContext = arg0;
}
public void setParent(Tag arg0) ...{
this.parent = arg0;
}
}
二、在WEB-INF中建立tlds文件夹,在tlds文件夹中加入标签描述文件MyTaglib.tld,内容如下:
<?
xml version="1.0" encoding="UTF-8"
?>
< taglib 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-jsptaglibrary_2_0.xsd"
version ="2.0" >
< description > Custom Tag Library </ description >
< tlib-version > 1.0 </ tlib-version >
< short-name > my </ short-name >
<!-- uri>/mytag</uri -->
< tag >
< name > hello </ name >
< tag-class > test.HelloTag </ tag-class >
< body-content > empty </ body-content >
</ tag >
</ taglib >
< taglib 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-jsptaglibrary_2_0.xsd"
version ="2.0" >
< description > Custom Tag Library </ description >
< tlib-version > 1.0 </ tlib-version >
< short-name > my </ short-name >
<!-- uri>/mytag</uri -->
< tag >
< name > hello </ name >
< tag-class > test.HelloTag </ tag-class >
< body-content > empty </ body-content >
</ tag >
</ taglib >
三、修改WEB-INF目录下的web.xml文件,内容如下:
<?
xml version="1.0" encoding="UTF-8"
?>
< web-app version ="2.4"
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" >
< jsp-config >
< taglib >
< taglib-uri > /mytag </ taglib-uri >
< taglib-location > /WEB-INF/tlds/MyTaglib.tld </ taglib-location >
</ taglib >
</ jsp-config >
</ web-app >
< web-app version ="2.4"
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" >
< jsp-config >
< taglib >
< taglib-uri > /mytag </ taglib-uri >
< taglib-location > /WEB-INF/tlds/MyTaglib.tld </ taglib-location >
</ taglib >
</ jsp-config >
</ web-app >
四、编写hello.jsp调用已定义的hello标签,内容如下:
<
%@ page
contentType
="text/html;charset=gb2312"
%
>
< %@ taglib uri ="/mytag" prefix ="my" % >
< html >
< head >< title >< my:hello /></ title ></ head >
< body >< my:hello /></ body >
</ html >
< %@ taglib uri ="/mytag" prefix ="my" % >
< html >
< head >< title >< my:hello /></ title ></ head >
< body >< my:hello /></ body >
</ html >
注:自定义标签有三种引用方式,第一种方式,就如上所述在web.xml文件中设置<tablib>元素。第二种方式,直接将页面的tablib指令的uri属性指定为TLD文件的位置。第三种方式,在TLD文件中设置<uri>元素。