在jsp编译阶段,遇到了自定义标签就会自动执行doStartTag();
本文主要讲解传统方式的自定义标签使用的步骤:
1.创建一个后缀名为.tld的文本文件,将它复制到web-inf里面。
<?xml version="1.0" encoding="UTF-8"?>
<!-- 标签库的头文件 -->
<taglib 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"
version="2.0">
<description>迭代器标签</description>
<tlib-version>1.0</tlib-version>
<short-name>tag</short-name><!--简称 -->
<uri>http://www.luzelong.com</uri>
<!-- 自定义标签的相关信息 -->
<tag>
<description>标签描述</description>
<name>hhl</name>
<tag-class>com.luze.tag.MyIteration</tag-class>
<body-content>JSP</body-content>
<!--给处理类加属性-->
<attribute>
<name>n</name>
<required>true</required><!--true表示该属性必写-->
</attribute>
</tag>

注意tag-class 属性写的是他的实现类,就是下面的我们要创建的类!
2.创建一个继承javax.servlet.jsp.tagext.TagSupport的类。
package com.luzelong.tag;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
public class MyIteration extends TagSupport {
private int n;//执行次数
public void setNum(int n){
this.n = n ;
}
//执行标签时
@Override
public int doStartTag() throws JspException {
return EVAL_BODY_INCLUDE;//先执行一次
}
//执行完毕后
@Override
public int doAfterBody() throws JspException {
n--;
return n>0?EVAL_BODY_AGAIN:SKIP_BODY;//当n>0 重复执行 SKIP_BODY 是不执行
}
}


3.jsp文件前面加上下面代码,构成连接
<%@ taglib uri="http://www.luze.com" prefix="lzl" %>
4.具体使用
<body>
<lzl:hhl n="3">love </lzl:hhl>
</body>
执行结果为love love love
上面是继承TagSupport类的写法,如果想在标签体被显示前,进行一些其他的“额外”操作(比如:转大小写)就要要继承BodyTagSupport类。
该类揽括了前面的所有方法。要使用该类就要导入tomcat自带的jasper.jar这个包。
提示:导入该jar包的方法是在idea上方导航栏的run->edit Configurations->tomcat->server->Application server->configure…->最下面的+号->lib里面找。
1.配置.tld
<tag>
<name>myToUpperCase</name>
<tag-class>com.luzelong.tag.ToUpperCase</tag-class>
<body-content>JSP</body-content>
</tag>
2.实现类
package com.luzelong.tag;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;
public class ToUpperCase extends BodyTagSupport {
//第一步 高数程序 我们要将原来的hellow变成大写,即将doStartTag()的返回值设置成 EVAL_BODY_BUFFER(此步骤已在父类默认设置)
//第二步,获取,并修改
@Override
public int doEndTag() throws JspException {
try {
String content = getBodyContent().getString();
content = content.toUpperCase();
bodyContent.getEnclosingWriter().write(content);
}catch (Exception e){
e.printStackTrace();
}
return super.doEndTag();
}
}
3.验证
<%@ taglib prefix="wc" uri="http://www.luzelong.com" %>
<lzl:myToUpperCase>hellow </lzl:myToUpperCase>
输出结果:HELLOW
本文详细介绍JSP自定义标签的创建与使用流程,包括.tld文件配置、处理类编写及在JSP页面中调用自定义标签的方法,同时演示如何通过继承TagSupport和BodyTagSupport实现不同功能。
&spm=1001.2101.3001.5002&articleId=104638212&d=1&t=3&u=79da77bc5d5b45199e464a0dd695f30d)
5231

被折叠的 条评论
为什么被折叠?



