1.传统标签
2.简单标签的使用和原理
3.简单标签的方法
1.传统标签
(1).实现Tag接口
(2).编写tld文件
(3).jsp中引入
但是:接口中有doStartTag()和doEndTag()方法的逻辑需要些,还需要根据返回的标签体控制程序执行,很繁琐
2.简单标签的方法
(1).实现SimpleTag接口(但是一般都继承SimpleTag的实现类SimpleTagSupport)
(2).写一个tld文件,描述写好的类
(3).在jsp中引入tld文件
原理:
(1).jsp碰到简单标签,会为该简单标签创建一个处理类对象
(2).通过getJspContext()方法获取jsp的pageContext对象
(3).通过调用getParent()方法获取该标签对象的父标签,没有父标签就不调
(4).通过getJspBody()获取封装了标签对象体信息的JspFragment
(5).如果有属性,如name,通过getName()获取属性
(6).最后调用doTag()方法处理标签事件,处理结束销毁对象
3.简单标签的方法
public class SimpleDemo extends SimpleTagSupport{
public void doTag() throws Exception{
//标签体是否执行?如果什么不做不执行,若想执行:
JspFragment fragment = getJspBody();
fragment.invoke(getJspContext().getOut());
//标签执行完之后是否继续向下执行?若什么都不做继续向下,若不想继续执行:
throw new SkipPageException();
//控制标签体重复执行
for(int i = 0;i<5;i++){
getJspBody().invoke(null);
}
//修改标签体后输出
StringWriter writer = new StringWriter();
JspFragment fragment = getJspBody();
fragment.invoke(writer);
String str = writer.toString();
str = str.toUpperCase();
getJspContext().getOut().write(str);
}
}
tld文件:
<taglib>
<tlib-version>1.0</tlib-version>
<short-name>myTag</short-name>
<uri>http://www.pgg.com/myTag</uri>
<tag>
<name>showIp</name>
<tag-class>com.pgg.simpleTag</tag-class>
<attribute>
<name>time</name>
<required>true</required>
</attribute>
<body-content>empty</body-content>
empty|scriptless(除java外jsp的任意内容)|Jsp(简单标签不用)|tagdependent(给后台用,一般不用)
</tag>
</taglib>
jsp:
<%@ uri="http://www.pgg.com/myTag" prefix="myTag"%>
<myTag:showIp>