1.步骤
*标签处理类(标签也是一个对象,那么就需要先有类)
*tld文件,他是一个xml
*页面中使用<%taglib%>来制定tld文件的位置
2.标签处理类
simpleTag接口:
*void doTag():每次执行标签时都会调用此方法
*JspTag getParent():返回父标签
*void setParent(JspTag):设置父标签
*void setJspBody(JspFragment):设置标签体
*void setJspContext(JspContext):设置jsp上下文对象
3.配置tld文件
tld文件一般放到web-inf之下,保证客户端访问不到
4.页面中执行tld文件位置
import java.io.IOException;
import javax.servlet.jsp.JspContext;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.JspTag;
import javax.servlet.jsp.tagext.SimpleTag;
/**
* 自定义标签 1
* @author cxf
*/
public class MyTag1 implements SimpleTag {
private PageContext pageContext;
private JspFragment body;
/**
* 所有的setXxx()方法都会在doTag()方法之前被tomcat调用!
* 所在doTag()中就可以使用tomcat传递过来的对象了。
*/
@Override
public void doTag() throws JspException, IOException {
pageContext.getOut().print("Hello Tag!");
}
@Override
public JspTag getParent() {
return null;
}
@Override
public void setJspBody(JspFragment body) {
this.body = body;
}
@Override
public void setJspContext(JspContext context) {
this.pageContext = (PageContext) context;
}
public void setParent(JspTag arg0) {}
}
新建tld文件
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1">
<tlib-version>1.0</tlib-version>
<short-name>***</short-name>
<uri>http://***/tags/1.0</uri>
<tag>
<name>myTag1</name>
<tag-class>**.***.tag.MyTag1</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
···············································································
import java.io.IOException;
import java.io.Writer;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
public class MyTag3 extends SimpleTagSupport {
@Override
public void doTag() throws JspException, IOException {
Writer out = this.getJspContext().getOut();//获取当前jsp页面的输出流
out.write("******************<br/>");
this.getJspBody().invoke(out);//执行标签体内容,把结果写到指定的流中,即页面上。
out.write("<br/>******************");
}
}