自定义标签
实现simpleTag接口 继承这个类就可以了SimpleTagSupport 它实现 了接口simpleTag
重写5个方法
setJspContext方法 用于把JSP页面的pageContext对象传递给标签处理器对象
setParent方法 用于把父标签处理器对象传递给当前标签处理器对象
getParent方法 用于获得当前标签的父标签处理器对象
setJspBody方法 用于把代表标签体的JspFragment对象传递给标签处理器对象
doTag方法 用于完成所有的标签逻辑,包括输出、迭代、修改标签体内容等。
在doTag方法中可以抛出javax.servlet.jsp.SkipPageException异常,
用于通知WEB容器不再执行JSP页面中位于结束标记后面的内容,
这等效于在传统标签的doEndTag方法中返回Tag.SKIP_PAGE常量的情况。
当web容器开始执行标签时,会调用如下方法完成标签的初始化 WEB容器调用标签处理器对象的setJspContext方法,将代表JSP页面的pageContext对象传递给标签处理器对象。 WEB容器调用标签处理器对象的setParent方法,将父标签处理器对象传递给这个标签处理器对象。注意,只有在标签存在父标签的情况下,WEB容器才会调用这个方法。 如果调用标签时设置了属性,容器将调用每个属性对应的setter方法把属性值传递给标签处理器对象。如果标签的属性值是EL表达式或脚本表达式,则WEB容器首先计算表达式的值,然后把值传递给标签处理器对象。 如果简单标签有标签体,容器将调用setJspBody方法把代表标签体的JspFragment对象传递进来。
执行标签时: 容器调用标签处理器的doTag()方法,开发人员在方法体内通过操作JspFragment对象,就可以实现是否执行、迭代、修改标签体的目的。
1.新建类继承实现 了simpleTag接口的类
/**
* 对外输出一名Hello
*
* @author sunyb
*
*/
public class tag_son extends SimpleTagSupport {
private PageContext pc;
@Override
public void doTag() throws JspException, IOException {
pc.getOut(). write("Hello");
}
@Override
public void setJspContext(JspContext pc) {
this. pc = (PageContext) pc;
}
}
2.添加tld文件进行类及uri的配置文件
< tlib-version>1.0</tlib-version >
< short-name> myc</ short-name>
< uri> http://www.it.cast.org.myc</ uri>
<!-- 配置自定义标签不带主体的 -->
< tag>
<!-- 配置标签名称 -->
< name> print</ name>
<!-- 配置标签类 -->
< tag-class> tag.tag_son</ tag-class>
<!-- 配置标签主体 -->
< body-content>empty</body-content >
</ tag>
<!-- 配置自定义标签带主体的 -->
<tag>
<!-- 配置标签名称 -->
< name> out</ name>
<!-- 配置标签类 -->
< tag-class> tag.tag_withBody</ tag-class>
<!-- 配置标签主体 -->
< body-content>scriptless </body-content >
</ tag>
</taglib>
3.引用进到页面中
<%@ taglib uri ="http://www.it.cast.org.myc" prefix= "myc" %>
<myc:print/>