一般我们说自定义标签是指JSP自定义标签。自定义标签在功能上和逻辑上与javaBean 类似,都封装Java 代码。自定义标签是可重用的组件代码,并且允许开发人员为复杂的操作提供逻辑名称。我们在之前的课程中讲解过自定义EL函数库,今天的自定义标签跟它有些类似。
我们自定义的标签是动作标签,可以理解为每个标签就是一个对象,有对象就必然有对应的类,那么标签的功能就在对应类的某个方法中实现。下面我们来学习自定义标签的步骤,具体如下:
l 定义一个标签处理类;
l 创建一个tld文件,该文件本身是一个xml文件;
l 在页面中使用<%@taglib%>指令来指定tld文件的位置。
在JavaEE帮助文档中定义了与标签相关的类,如图1-1所示:
图1-1 Tag接口
图1-1中的Tag是经典标记处理程序的接口,定义了标记处理程序与 JSP 页面实现类之间的基本协议,也定义了生命周期以及在开始和结束标记时调用的方法。但是相对于其他标签处理接口来说比较复杂,因此我们定义的标签处理类不会去实现Tag接口,而是去实现SimpleTag接口,该接口的父接口是JspTag,它和Tag是兄弟关系。如图1-2所示:
图1-2 SimpleTag接口
SimpleTag是用来定义简单标记处理程序的接口。简单标记处理程序不同于经典标记处理程序,因为它不支持 doStartTag() 和 doEndTag(),SimpleTag 接口提供了一个简单 doTag() 方法,对于任何给定标记调用,只能调用该方法一次。所有标记逻辑、迭代、正文求值等等,都在这一个方法中执行。因此,简单标记处理程序与 BodyTag 具有相等的效力,只是它具有更简单的生命周期和接口。
下面我们来了解SimpleTag接口的方法,如下所示:
l void doTag():每次执行标签时都会调用这个方法;
l JspTag getParent():返回当前标签的父标签;
l void setParent(JspTag parent):设置父标签;
l void setJspBody(JspFragment jspBody):设置标签体;
l void setJspContext(JspContext pc):设置jsp上下文对象,其中JspContext类的子类是PageContext。
以上这五个方法中,setParent(JspTag parent)、setJspBody(JspFragment jspBody)、setJspContext(JspContext pc)方法是由Tomcat服务器调用,服务器在调用setJspContext(JspContext pc)方法时,会将页面中的pageContext对象传递给该方法,那么我们就可以通过pageContext对象获得其他内置对象了。当以上三个方法被调用后,doTag()方法才会被Tomcat服务器调用,而getParent()方法很少被调用,因为我们自定义的标签很少会有父标签。需要注意的是我们自定义的标签是动作标签,那么它的父标签也只能是动作标签,因此HTML标签不算是自定义标签的父标签。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/java/253139.html