实现第一个Taglib,使用JSPTag接口的子接口Tag实现一个无body体的taglib,
1. 编写一个类实现Tag接口
package com.lecky;
import javax.servlet.jsp.tagext.Tag;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.JspException;
import java.io.IOException;
/**
* <p>Title: taglib</p>
*
* <p>继承tag类,实现其方法构建tag </p>
*
* <p>Copyright: Copyright (c) 2006</p>
*
* <p>Company: accp</p>
*
* @author lecky.lee
* @version 1.0
*/
public class FirstTag implements Tag{
private PageContext pageContext;
public FirstTag() {
}
//设置上下文
public void setPageContext(PageContext pc) {
this.pageContext=pc;
try {
this.pageContext.getOut().println("setPageContext");
} catch (IOException ex) {
}
}
//设置父标签
public void setParent(Tag t) {
}
//得到父标签
public Tag getParent() {
return null;
}
//标签开始时执行
public int doStartTag() {
try {
this.pageContext.getOut().println("lecky");
} catch (IOException ex) {
}
return this.SKIP_BODY;
}
//标签结束时执行
public int doEndTag() throws JspException {
try {
this.pageContext.getOut().println("end");
} catch (IOException ex) {
}
return this.EVAL_PAGE;
}
//标签资源释放时执行
public void release() {
try {
this.pageContext.getOut().println("release");
} catch (IOException ex) {
}
}
}
2. 书写一个tld,定义标签库,此示例为myTag.tld文件,路径为/WEB-INF/:
<?xml version="1.0" encoding="GB2312"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_1.dtd">
<taglib>
<!--
此标签在之后的版本中替换为<tlib-version> ,<jsp-version>
-->
<tlibversion>1.0</tlibversion>
<jspversion>1.2</jspversion>
<shortname>frist</shortname>
<!--shortname将对应调用此标签JSP的prefix前缀,但此规则并未严格执行-->
<uri>/myFirstTag</uri>
<!--uri也可以不被指定,web.xml中也可以不必声明,则jsp中的uri直接使用此tld的相对路径或者直接声明为网址-->
<tag>
<name>firstTag</name>
<tagclass>com.lecky.FirstTag</tagclass>
<bodycontent>empty</bodycontent>
<!--bodycontent代表是否支持标签body体,不支持为empty,支持为jsp-->
</tag>
</taglib>
3. 在web.xml中声明标签库
<?xml version="1.0" encoding="UTF-8"?>
<web-app 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" version="2.4">
<display-name>WebModule1</display-name>
<taglib>
<taglib-uri>/myFirstTag</taglib-uri>
<taglib-location>/WEB-INF/myTag.tld</taglib-location>
</taglib>
</web-app>
4. 在Jsp文件中调用此标签
<%@ page contentType="text/html; charset=GB2312" %>
<%@ taglib uri="/myFirstTag" prefix="frist"%>
<html>
<head>
<title>
tag
</title>
</head>
<body bgcolor="#ffffff">
<h1>
<frist:firstTag/>
</h1>
</body>
</html>