自定义标签
1.自定义标签技术出现的原因:
虽然有第三方组织提供了很多标签,但是这些都是一些通用标签,开发中常常需要根据业务需求使用jsp页面,这个时候通用的标签就不够用了,我们需要自己去开发标签库。
2.标签处理类生命周期
2.1传统标签处理类的生命周期:
传统标签处理类在标签被第一次使用时创建实例,从此驻留内存为后续请求提供服务,其中每次标签执行都会依次执行setPageContext(PageContext pc) 、setParent(Tag t) 、doStartTag() 、doEndTag() 、~在服务器停止之前调用release() 。
注:doStartTag 和 doEndTag方法来分别处理发现开始标签和发现结束标签时的代码,在doStartTag可以通过返回值来控制标签体是否允许执行,在doEndTag方法里可以通过返回值控制标签之后的剩余页面是否允许执行
<span style="color:#000000;">private PageContext pc = null;
public int doEndTag() throws JspException {
//EVAL_PAGE -- 结束标签之后的剩余页面需要去执行
//SKIP_PAGE -- 结束标签之后的剩余页面不要去执行
return 0;
}
public int doStartTag() throws JspException {
try {
String ip = pc.getRequest().getRemoteAddr();
pc.getOut().write(ip);
} catch (IOException e) {
e.printStackTrace();
}
//Eval_Body_Include -- 开始标签之后的标签体需要执行
//Skip_Body -- 开始标签之后的标签体不需要执行
return 0;
}
public Tag getParent() {
return null;
}
public void release() {
}
public void setPageContext(PageContext pc) {
this.pc = pc;
}
public void setParent(Tag t) {
}</span>
注:这些函数的返回值可以控制标签的输出。
传统标签的这种开发方式,需要我们分析发现开始标签和发现结束标签时都需要执行什么代码,还需要分析到底要返回什么样的标签体控制程序执行,相对来说相当的繁琐.
编写方法:传统标签:
(1)写一个类实现Tag接口
(2)写一个tld文件,描述写好的类
(3)在jsp页面中引入tld文件,就可以在jsp页面中使用自定义标签了
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" 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">
<tlib-version>1.0</tlib-version>
<short-name>MyTag</short-name>
<uri>http://www.itheima.com/MyTag</uri>
<tag>
<name>showip</name>
<tag-class>com.itheima.tag.ShowIpTag</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>