自定义标签

    自定义标签
    实现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/>
原文地址:https://www.cnblogs.com/haofaner/p/5645113.html