🥳🥳Welcome Huihui's Code World ! !🥳🥳
接下来看看由辉辉所写的关于自定义标签的相关操作吧
目录
🥳🥳Welcome Huihui's Code World ! !🥳🥳
一.什么是标签
二.什么是自定义标签
💡辉辉小贴士:我们已经知道了标签是什么,那么jsp标签的工作流程是怎样的呢?
三.为什么要使用自定义标签
四.怎么使用自定义标签➡自定义标签的步骤
1.建立一个标签助手类
2.建立一个tld文件【标签库描述文件】
3.页面上引用即可
💡辉辉小贴士:怎么样才知道自己精准掌握了呢?答案就是做个题目爽一爽
需求:自定义一个if标签,作用是如果判断的条件是true,那么就输出标签体的内容,否则不输出
五.自定义标签的生命周期
一.什么是标签
在计算机领域中,标签(Tag)通常指的是一种元素标记语言(例如HTML)中用于标明内容类型的术语。通过在元素内部加上标签,可以告诉浏览器或其他程序如何显示或处理该元素中的内容。在Web浏览器中,通常使用标签来创建网页布局,插入图片、链接和其他媒体,以及定义页面的样式和交互行为。在WeTab新标签页中,标签可以理解为Web页面的一页,用于显示和处理一个特定的网站或Web应用程序
二.什么是自定义标签
自定义标签(Custom Tags)是指在HTML或其他元素标记语言中自定义的标签。自定义标签是通过扩展标记语言的功能和语法,使开发者可以创建自己的标签来达到自己的定制化需求。这些自定义标签可以被用于网页布局、交互和数据呈现等方面。
自定义标签可以帮助开发者更加高效地构建网页,因为它们可以代替一些常见的、重复的HTML代码。例如,如果你在网页中需要多次使用一个特定样式和交互的组件,你可以在HTML中创建一个自定义标签,然后在需要使用该组件的地方使用该标签。这样可以减少页面中的冗余HTML代码,同时也使得代码更加易于维护和扩展
💡辉辉小贴士:我们已经知道了标签是什么,那么jsp标签的工作流程是怎样的呢?
JSP标签的工作流程可以分为以下几个步骤:
- 1. 当JSP页面被请求时,Web容器会将该页面转换为Servlet并进行编译
- 2. 在编译期间,Web容器会解析JSP页面中使用的标准标签库(例如JSTL和EL)以及自定义标签库(如果有的话),并生成对应的Java代码。这些Java代码可以用于在JSP页面中处理标签
- 3. 在运行期间,当遇到标签时,Web容器会在相应的标签库中查找该标签的定义,并将标签解析为Java代码
- 4. 在Java代码中,标签的处理类会被实例化和执行【通过反射机制】如果对反射机制感兴趣的话,可以点击链接,从而生成相应的输出文本。使用标签可省略很多JSP页面中的Java代码,使JSP页面变得更加简洁
- 5. 最终,生成的输出文本会被写回到HTTP响应中,返回到客户端的浏览器上
三.为什么要使用自定义标签
使用自定义标签可以带来以下几个好处:
- 1. 重用代码:自定义标签可以将重复的代码封装起来,可以在多个页面中使用该标签,从而减少代码量,提高代码的重用性和可维护性。
- 2. 提高可读性:自定义标签允许开发人员将业务逻辑和数据处理等操作放在标签中,消耗的代码量比纯Java代码要少,使代码更清晰更易于阅读和理解。
- 3. 提高可扩展性:通过使用自定义标签,可以将应用逻辑模块化,在不改变前端视图的情况下,更加方便地处理逻辑改动。
- 4. 提升开发效率:使用自定义标签不仅可以提高代码重用性和可扩展性,同时也可以加快开发速度,缩短项目开发周期。
⭐⭐总之,使用自定义标签可以使JSP页面更易于维护,在开发过程中提高开发效率,减少代码量,提高代码可读性和可维护性,使得项目更具有可扩展性和可重用性
四.怎么使用自定义标签➡自定义标签的步骤
以out标签为例
1.建立一个标签助手类
① 继承BodyTagSuport
②定义标签中所需属性
③写好get,set方法
④按照自定义标签的规则写好dostarttag...package com.wh.tag; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.BodyTagSupport; public class OutTag extends BodyTagSupport{ 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) { Defaultval = defaultval; } @Override public int doStartTag() throws JspException { //获取页面上下文对象 JspWriter out = this.pageContext.getOut(); try { if(val==null||val.equals("")) { out.print(this.Defaultval); }else { out.print(this.val); } } catch (IOException e) { e.printStackTrace(); } return SKIP_BODY; } }
2.建立一个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> <uri>wh</uri> <tag> <!-- 标签名字 --> <name>out</name> <!-- 标签助手类的全路径名 --> <tag-class>com.wh.tag.OutTag</tag-class> <!-- 标签体内容==是否是空【为空】 --> <body-content>empty</body-content> <!-- 属性 --> <attribute> <!-- 属性名 --> <name>val</name> <!-- 属性是否是必填的 --> <required>true</required> <!-- 属性值是否可以支持EL表达式 --> <rtexprvalue>true</rtexprvalue> <!-- 对out标签val属性作用的描述 --> <description>out标签val属性,用于输出val的值</description> </attribute> <!-- 属性 --> <attribute> <!-- 属性名 --> <name>defaultVal</name> <!-- 属性是否是必填的 --> <required>false</required> <!-- 属性值是否可以支持EL表达式 --> <rtexprvalue>false</rtexprvalue> <!-- 对out标签defaultVal属性作用的描述 --> <description>用于定义默认值</description> </attribute> </tag> </taglib>
3.页面上引用即可
【 <%@taglib prefix="w" uri="wh" %> uri要与自定义标签库中的的一致】
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@taglib prefix="w" uri="wh" %> <!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>使用自定义标签</title> </head> <body> <!-- out标签 --> <w:out val="123"/> </body> </html>
运行结果
💡辉辉小贴士:怎么样才知道自己精准掌握了呢?答案就是做个题目爽一爽
需求:自定义一个if标签,作用是如果判断的条件是true,那么就输出标签体的内容,否则不输出
标签助手类
package com.wh.tag; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.BodyTagSupport; public class IfTag extends BodyTagSupport { private boolean test; public boolean isTest() { return test; } public void setTest(boolean test) { this.test = test; } @Override public int doStartTag() throws JspException { if (this.test) { return EVAL_BODY_INCLUDE;// 如果结果为true,那么就输出标签体的内容 } 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-version>1.2</jsp-version> <short-name>Simple Tags</short-name> <uri>wh</uri> <tag> <!-- 标签名字 --> <name>if</name> <!-- 标签助手类的全路径名 --> <tag-class>com.wh.tag.IfTag</tag-class> <!-- 标签体内容==是否是空【不为空】 --> <body-content>jsp</body-content> <!-- 属性 --> <attribute> <!-- 属性名 --> <name>test</name> <!-- 属性是否必填 --> <required>true</required> <!-- 属性是否支持EL表达式 --> <rtexprvalue>true</rtexprvalue> <!-- 对if标签属性作用的描述 --> <description>if标签</description> </attribute> </tag> </taglib>
页面上引用
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@taglib prefix="w" uri="wh" %> <!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>使用自定义标签</title> </head> <body> <!--if标签 --> <w:if test="${100 == 100}"> 结果为true,输出!! </w:if> <w:if test="${100 != 100}"> 结果为false,不输出!! </w:if> </body> </html>
运行结果
五.自定义标签的生命周期
详解:
返回值
方法返回值 方法返回值 备注 SKIP_BODY 跳过主体,不输出主体内容 EVAL_BODY_INCLUDE 计算标签主体内容并输出 EVAL_PAGE 计算页面的后续部分 SKIP_PAGE 跳过页面的后续部分 EVAL_BODY_AGAIN 再计算主体一次并输出
好啦,今天的分享就到这了,希望能够帮到你呢!😊😊