JSP自定义标签

简介: JSP自定义标签

一,JSP自定义标签

1.1是什么?

  是一种在JSP页面中定义的扩展标签,它由开发人员自行编写,以便将某些功能封装在标签中,并在JSP页面中如同普通标签一样使用。JSP容器在解析JSP页面时,遇到自定义标签会把它转换成相应的Java代码,并最终生成HTML页面。

1.2.与原生态JSP标签的区别

    自定义标签具有较高的可重用性和灵活性。开发人员可以根据实际需要编写自定义标签,在JSP页面中复用这些标签以实现代码逻辑复用和逻辑分离。自定义标签可以在创建时使用Java类扩展TagSupport或 SimpleTagSupport类,以实现标签中的逻辑代码。标签属性可以使用JavaBean、XML文档等方式定义,从而使标签可以灵活适应各种实现场景。

1.3JSP自定义标签使用大致流程

   通常需要对标签进行声明和引用。这通过在web.xml文件或TLD文件中对标签进行定义,并在JSP页面中引用其名称空间实现。在JSP页面中,可以像使用常规标签一样使用自定义标签。

自定义标签代码:

<%@taglib prefix="mytags" uri="/WEB-INF/mytags.tld" %>
<mytags:customtag message="Hello World!"/>

  在上面上自定义标签例子中,自定义标签的名称是customtag,它的属性是message。在使用中,开发人员可以根据自己的实际需要添加或修改标签的属性,以实现所需的逻辑。它为JSP开发人员提供了更为灵活的编程方式,同时也方便了代码复用和维护。

二,自定义标签使用流程

2.1 定义类一继承标签助手类

先继承BodyTagSupport类, 提供get set方法,重写doStartTag(需要手动重写)再获取

pageContext获得上下文信息,最后在进行一个属性值val判断

package com.LiuBing.text;
import java.io.IOException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;
      //继承BodyTagSupport助手类
public class OutTag extends BodyTagSupport{
    //定义标签中的属性  并提供get set方法
  private String val;
  private String defaultVal;
  public String getVal() {
    return val;
  }
  public void setVal(String val) {
    this.val = val;
  }
  public String getDefaultVal() {
    return defaultVal;
  }
  public void setDefaultVal(String defaultVal) {
    this.defaultVal = defaultVal;
  }
  //重写标签助手类的方法  需要手动重写
  @Override
  public int doStartTag() {
       //获取out对象 在JSP页面输出内容
    JspWriter out = this.pageContext.getOut();
     //判断在JSP页面val值是否为空
    try {
      if(this.val==null || "".equals(this.val)) {//如果在jsp页面val值是null并没有填写内容时
        out.println(this.defaultVal);//输出默认值defaultVal 
      }else {//否则
        out.println(this.val);//输出填写的val值
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
    return SKIP_BODY;
  }
}

2.2 编写标签库tld,对标签及属性进行约束

2.2.1概述:

        是描述文件,在TLD文件中定义了自定义标签的名称、属性、使用说明等信息。TLD文件遵循XML格式,通常位于Web应用程序的WEB-INF文件夹下,使用.tld文件扩展名。

<!DOCTYPE taglib
  PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
   "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<!-- 标签库描述符 -->
<taglib xmlns="http://java.sun.com/JSP/TagLibraryDescriptor">
  <tlib-version>1.0</tlib-version>
  <jsp-version>1.2</jsp-version>
  <short-name>Simple Tags</short-name>
    <!--在jsp页面导入此标签库 -->
  <uri>/out</uri>
  <tag>
      <!-- 标签名 -->
    <name>out</name>
    <!-- 引入标签助手类 -->
    <tag-class>com.LiuBing.text.OutTag</tag-class>
    <!--标签的内容类型:empty表示空标签,jsp表示可以为任何合法的JSP元素 -->
    <body-content>empty</body-content>
        <!--定义属性-->
         <attribute>
      <!-- 属性名, OutTag类中的val属性相匹配 -->
      <name>val</name>
      <!-- 表示该属性为必要的属性 -->
      <required>true</required>
      <!-- 该属性可以接受EL表示式的值 -->
      <rtexprvalue>true</rtexprvalue>
      <!-- 标签描述,用于说明标签的作用 -->
      <description>out标签val属性,用于输出val的值</description>
    </attribute>
       <!--定义属性-->
    <attribute>
      <!-- 属性名, OutTag类中的val属性相匹配 -->
      <name>defaultVal</name>
      <!-- 表示该属性为必要的属性 -->
      <required>false</required>
      <!-- 该属性可以接受EL表示式的值 -->
      <rtexprvalue>true</rtexprvalue>
      <!-- 标签描述,用于说明标签的作用 -->
      <description>out标签val属性,用于输出val的值</description>
    </attribute>
  </tag>
  </taglib>

2.2.2 JSP页面引入标签及输出

导入标签库:

用taglib引入标签库,也就是url引入刚所写的标签库中url

输出内容:

 

上述情况是val中有定义321的情况下输出321,没有定义值的话,将输出默认值defaultVal中的值

 

目录
相关文章
|
5月前
|
Java
JSP自定义标签【下】
JSP自定义标签【下】
50 0
|
6月前
|
Java
jsp自定义标签
jsp自定义标签
43 1
|
23天前
|
Java 数据安全/隐私保护
Jsp自定义标签(foreach,dept,select)
Jsp自定义标签(foreach,dept,select)
28 0
|
4月前
|
XML Java 数据格式
JSP自定义标签
JSP自定义标签
53 0
|
5月前
|
存储 Java 开发者
JSP自定义标签(下)
JSP自定义标签(下)
39 0
|
5月前
|
XML Java 数据格式
JSP自定义标签
JSP自定义标签
42 0
|
5月前
|
Java API
JSP自定义标签【上】
JSP自定义标签【上】
36 0
|
6月前
|
存储 安全 Java
JSP自定义标签(进阶)
JSP自定义标签(进阶)
18 0
|
6月前
|
XML Java 数据格式
JSP自定义标签(基础)
JSP自定义标签(基础)
22 0
|
6月前
|
Java 开发者
JSP自定义标签
JSP自定义标签
31 0

相关课程

更多