一,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中的值