tld自定义标签
tld自定义标签
1.简介
tld(taglib description)是自定义标签,自定义标签一般用于jsp页面。使用tld可以在JSP页面中使用自己定义的标签。这样你就可以在JSP页面用,除了使用JSP标准标签库(JSTL)外,还可以使用自己自定义的标签库。看看别是怎么说的:
自定义标签是用户定义的JSP语言元素。当JSP页面包含一个自定义标签时将被转化为servlet,标签转化为对被 称为tag handler的对象的操作,即当servlet执行时Web container调用那些操作。
JSP标签扩展可以让你创建新的标签并且可以直接插入到一个JSP页面。 JSP 2.0规范中引入Simple Tag Handlers来编写这些自定义标记。
你可以继承SimpleTagSupport类并重写的doTag()方法来开发一个最简单的自定义标签。
来自:菜鸟编程(https://www.runoob.com/jsp/jsp-custom-tags.html)
2.了解标签结构
标签有一下结构:标签体,标签名,标签属性
<MyTag></MyTag>
<MyTag>MyTag body</MyTag>
<MyTag 标签属性="xxx"/>
3.编写自定义标签
编写自定义标签分三步走:
- 编写标签处理类
- 编写标签描述符
- 导入并使用自定义标签
3.1编写标签处理类
要自定义标签就需要,编写标签的处理类,处理类决定了标签的功能。自定义标签先继承SimpleTagSupport类,并重写其中的doTag()方法。doTag()方法用于编写标签的执行体,其方法的定义来自于 interface SimpleTag。
SimpleTagSupport主要有以下方法:
- public void doTag() 标签方法体
- public void setParent(JspTag parent) 标签镶嵌是会调用的方法,就是给标签设置父标签(一般不重写)
- public JspTag getParent() 获取父标签
- public void setJspContext(JspContext pc) 存储提供的JSP上下文jspContext对象
- protected JspContext getJspContext() 获取JspContext
- public void setJspBody(JspFragment jspBody) 设置标签
- protected JspFragment getJspBody() 获取标签
我们只需要重点关注doTag(),getJspBody(),和getJspContext() 方法。
例子一:只针对标签的功能
public class HelloTag extends SimpleTagSupport {
//重写doTag()方法,doTag()方法用于编写标签的执行体
public void doTag() throws JspException, IOException {
//使用了getJspContext()方法来获取当前的JspContext对象
JspWriter out = getJspContext().getOut();
//打印
out.println("Hello Custom Tag!");
}
}
例子二:将标签体打印到JSP页面中(这里用到了标签体)
注释:invoke方法可以控制是否执行和输出标签体的内容、是否迭代执行标签体的内容或对标签体的执行结果进行修改后再输出。可以使用invoke方法多次执行和输出标签体的内容。
public class HelloTag extends SimpleTagSupport {
StringWriter sw = new StringWriter();
public void doTag() throws JspException, IOException{
//获取标签体,如(<sd>我是标签体</sd>)
getJspBody().invoke(sw);
//getJspContext()方法来获取当前的JspContext对象,并打印标签体到页面中
getJspContext().getOut().println(sw.toString());
}
}
例子三:从属性和标签体中获取信息
public class HelloTag extends SimpleTagSupport {
private String message;
//自定义的标签属性必须提供set方法,将通过set方法传值
public void setMessage(String msg) {
this.message = msg;
}
StringWriter sw = new StringWriter();
public void doTag() throws JspException, IOException
{
if (message != null) {
/* 从属性中使用消息 */
JspWriter out = getJspContext().getOut();
out.println( "标签属性是:"+ message);
}
else {
/* 从内容体中使用消息 */
getJspBody().invoke(sw);
getJspContext().getOut().println("标签体是:"+sw.toString());
}
}
}
3.2 编写标签描述符
编写好标签处理类我们就可以开始制作标签啦,先在WEB-INF/目录下创建mytag.tld文件。
<?xml version="1.0" encoding="UTF-8" ?>
<taglib>
<!--标签库的描述信息-->
<tlib-version>1.0</tlib-version>
<jsp-version>2.0</jsp-version>
<short-name>Example TLD</short-name>
<!--自定义的标签-->
<tag>
<!--标签名-->
<name>Hello</name>
<!--对应的处理类-->
<tag-class>com.runoob.HelloTag</tag-class>
<!--处理类中定义的变量,因为没有所以empty-->
<body-content>empty</body-content>
</tag>
<!--如果有自定义标签属性的,要添加attribute
<tag>
<name>Hello</name>
<tag-class>com.runoob.HelloTag</tag-class
<body-content>scriptless</body-content>
<attribute>
<name>message</name>
</attribute>
</tag>
-->
</taglib>
3.3导入并使用自定义标签
最后一部就是导入标签库了,这个十分简单只需要使用 <%@ taglib prefix=“ex” uri=“WEB-INF/custom.tld”%> 导入即可。
<!--prefix引用前缀,uri指定引用的标签库-->
<%@ taglib prefix="ex" uri="WEB-INF/mytag.tld"%>
<html>
<head>
<title>A sample tag</title>
</head>
<body>
<ex:Hello/>
<!--
根据实际的需要,可以利用标签体和标签属性能丰富标签的功能
-->
</body>
</html>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)