自定义标签(JSP1.1)

在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&nbsp;</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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

键盘歌唱家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值