JSP自定义标签(基础)

简介: JSP自定义标签(基础)

一.标签

1.什么是标签

标签(Tag):是一种特殊的语言构造,通常用于在一些具有特定功能的语言中指定标记或元数据,从而实现一些特殊的效果或功能。很多与“ML”结尾的语言都是标记语言,比如:HTML,XML,XHTML,VML等等。标记语言与其他语言一样,也需要运行它们的环境,比如HTML的运行环境时浏览器,XML也要自己的解析和运行的环境。

2.标签的特点

  1. 标签语言特点<开始标签 属性="属性值">标签体</结束标签>
  1. 标签的种类                                                                                                                        空标签 <hr/> <开始标签></结束标签> <开始标签/>                                             标签体标签   是指包含主体内容的标签,标签体标签的处理需要对标签的主体内容进行解析和处理,例如<if>标签和<foreach>标签等

二.自定义标签

1.什么是自定义标签?

自己定义的一种规则,可以在jsp页面通过url应用。例如我们使用的c标签就是别人写好的标签。

2.自定义标签生命周期

 

3.如何开发使用自定义标签?

步骤:

2.1 创建一个标签助手类(继承BodyTagSupport) 标签属性必须与助手类的属性对应、且要提供对应get/set方法 rtexprvalue

2.2 创建标签库描述文件(tld),添加自定义标签的配置 注:tld文件必须保存到WEB-INF目录或其子目录 jstl标签库

2.3 在JSP通过taglib指令导入标签库,并通过指定后缀访问自定义标签

当我们使用了自定义标签后的运行效果:

 

第一步:实例助手类:outtag

代码如下:

package com.lya.tag;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;
/**
    * 标签的使用:实例助手类
 * 
 * @author :李永安
 * @date :2023年6月23日 上午9:50:38
 */
public class outtag extends BodyTagSupport {
  // 标签的使用:
  // 2.1 创建一个标签助手类(继承BodyTagSupport)
  // 标签属性必须与助手类的属性对应、且要提供对应get/set方法
  // 2.2创建标签库描述文件(tld),添加自定义标签的配置
  private String aa;//给定的值
  private String bb;//默认输出的值
  public String getAa() {
    return aa;
  }
  public void setAa(String aa) {
    this.aa = aa;
  }
  public String getBb() {
    return bb;
  }
  public void setBb(String bb) {
    this.bb = bb;
  }
  @Override
  public int doStartTag() throws JspException {
    JspWriter out = this.pageContext.getOut();
    try {
      if(this.aa == null || "".equals(this.aa)) {
        //利用jspwrite输出 
        out.println(this.bb);
      } else {
        out.println(this.aa);
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
    return SKIP_BODY;
  }
}

实例助手类:iftag

代码如下:

package com.lya.tag;
import javax.servlet.jsp.tagext.BodyTagSupport;
public class iftag extends BodyTagSupport{
  private boolean cc;
  public boolean isCc() {
    return cc;
  }
  public void setCc(boolean cc) {
    this.cc = cc;
  }
  @Override
  public int doStartTag() {  
    if(this.cc) {
      return EVAL_BODY_INCLUDE;
    }
    return SKIP_BODY;
  }
}

第二步:创建标签库描述文件(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的版本 -->
  <jsp-version>1.2</jsp-version>
  <!-- 你的标签库的简称 -->
  <short-name>test</short-name>
  <!-- 你标签库的引用uri -->
  <uri>/zking</uri>
  <tag>
    <!-- 标签名 -->
    <name>out</name>
    <!-- 标签工具类 -->
    <tag-class>com.lya.tag.outtag</tag-class>
    <!-- 标签的内容类型:empty表示空标签,jsp表示可以为任何合法的JSP元素 -->
    <body-content>jsp</body-content>
    <!-- 自定义标签的属性定义,请注意一定要在标签类中提供对应的get/set方法 -->
    <attribute>
      <!-- 自定义标签的属性名称 -->
      <name>aa</name>
      <!-- true表示必填 -->
      <required>true</required>
      <!-- true支持动态值,可以向值里面填jsp表达式、EL表达式,false则不支持 -->
      <rtexprvalue>true</rtexprvalue>
      <description>out标签aa属性,输出aa</description>
    </attribute>
    <attribute>
      <!-- 自定义标签的属性名称 -->
      <name>bb</name>
      <!-- true表示必填 -->
      <required>false</required>
      <!-- true支持动态值,可以向值里面填jsp表达式、EL表达式,false则不支持 -->
      <rtexprvalue>true</rtexprvalue>
      <description>默认输出</description>
    </attribute>
  </tag>
  <tag>
    <!-- 标签名 -->
    <name>if</name>
    <!-- 标签工具类 -->
    <tag-class>com.lya.tag.iftag</tag-class>
    <!-- 标签的内容类型:empty表示空标签,jsp表示可以为任何合法的JSP元素 -->
    <body-content>jsp</body-content>
    <!-- 自定义标签的属性定义,请注意一定要在标签类中提供对应的get/set方法 -->
    <attribute>
      <!-- 自定义标签的属性名称 -->
      <name>cc</name>
      <!-- true表示必填 -->
      <required>true</required>
      <!-- true支持动态值,可以向值里面填jsp表达式、EL表达式,false则不支持 -->
      <rtexprvalue>true</rtexprvalue>
      <description>if标签cc属性,输出cc</description>
    </attribute>
  </tag>
</taglib>

第三步:引用标签库

代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<%@taglib prefix="z" uri="/zking"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
  <%
    request.setAttribute("name", "zs");
  %>
  <!-- out 标签 -->
  <z:out aa="${name}" bb="--" />
  <z:out aa="eweg"></z:out>
  <z:if cc="${100 == 100}">
    测试if(100 == 100)
  </z:if>
  <z:if cc="${100 != 200}">
    测试if(100 != 200)
  </z:if>
  <z:if cc="${100 == 200}">
    测试if(100 != 200)
  </z:if>
</body>
</html>

三.总结

1.自己定义的一种规则,可以在jsp页面通过url应用。例如我们使用的c标签就是别人写好的标签。

2.写自定义标签的步骤:

2.1 创建一个标签助手类(继承BodyTagSupport) 标签属性必须与助手类的属性对应、且要提供对应get/set方法 rtexprvalue

2.2 创建标签库描述文件(tld),添加自定义标签的配置 注:tld文件必须保存到WEB-INF目录或其子目录 jstl标签库

2.3 在JSP通过taglib指令导入标签库,并通过指定后缀访问自定义标签

目录
相关文章
|
Java
JSP自定义标签【下】
JSP自定义标签【下】
65 0
|
Java
jsp自定义标签
jsp自定义标签
75 1
|
5月前
|
Java 容器
JSP 教程 之 JSP 自定义标签 3
JSP自定义标签允许开发人员创建可重用的组件,简化页面逻辑。在JSP 2.0及以上版本,可通过继承`SimpleTagSupport`并覆写`doTag()`方法来创建自定义标签,如`HelloTag`,它有一个`message`属性。属性值通过setter方法`setMessage()`设置。在TLD文件中定义该属性后,可在JSP页面使用`&lt;ex:Hello message=&quot;This is custom tag&quot;/&gt;`来调用,输出定制的文本。
26 0
|
5月前
|
Java 容器
JSP 教程 之 JSP 自定义标签 4
**JSP自定义标签允许创建用户定义的语言元素。它们转换为Servlet中的tag handler,在执行时由Web容器调用。使用SimpleTagSupport继承并重写doTag()方法可创建简单标签。标签可设置属性,如message,通过setter方法访问。TLD文件定义属性元数据,JSP页面则通过prefix和uri引用。例如,&lt;ex:Hello message=&quot;...&quot;/&gt; 显示定制消息。属性可配置为必需、类型、描述及是否为JspFragment。**
29 0
|
5月前
|
搜索推荐 Java 容器
JSP 教程 之 JSP 自定义标签 2
**JSP自定义标签允许用户创建个性化标签,简化页面逻辑。在JSP 2.0中,通过继承`SimpleTagSupport`并重写`doTag()`可创建简单标签处理器。示例展示了一个名为`Hello`的自定义标签,它接收并显示标签体内容。TLD文件配置了标签元数据,JSP页面引用该标签并展示“这是消息主体”。**
24 0
|
5月前
|
Java 容器
JSP 教程 之 JSP 自定义标签 1
**JSP自定义标签简介**:扩展JSP功能,创建用户定义标签,通过Servlet容器调用Tag Handler。在JSP 2.0中,使用SimpleTagHandlers简化定制。以&quot;Hello&quot;标签为例,创建`HelloTag`类继承`SimpleTagSupport`,重写`doTag()`打印消息。编译后,在`custom.tld`定义标签库,JSP页面引用后即可使用。例如 `&lt;ex:Hello/&gt;` 显示 &quot;Hello Custom Tag!&quot;。
28 0
|
前端开发 Java
通用分页进阶之jsp之自定义标签
通用分页进阶之jsp之自定义标签
35 1
|
6月前
|
Java 数据安全/隐私保护
Jsp自定义标签(foreach,dept,select)
Jsp自定义标签(foreach,dept,select)
48 0
|
6月前
|
XML Java 数据格式
JSP自定义标签
JSP自定义标签
69 0
|
存储 Java 开发者
JSP自定义标签(下)
JSP自定义标签(下)
57 0