当前位置:网站首页>JSP Taglib指令具有什么功能呢?
JSP Taglib指令具有什么功能呢?
2022-08-02 00:01:00 【qq_25073223】
转自:
下文讲述JSP中Taglib指令的功能简介说明,如下所示:
Taglib指令的功能:
定义一个标签库以及其自定义标签的前缀 一个自定义的tag标签是用户定义的一种JSP标记 当一个含有自定义的tag标签的JSP页面被jsp引擎编译成servlet时 此时tag标签被转化成了对一个称为tag处理类的对象进行的操作 当JSP页面被jsp引擎转化为servlet后,实际上tag标签被转化成为了对tag处理类的操作
Taglib指令的语法
<%@ taglib uri="" prefix="c"%>
prefix:是一个标签库别名
taglib之uri:引入jsp的标签库
Taglib子元素
| Element | Description |
| tlib-version | Tag库的版本 |
| jsp-version | Tag库所需要的jsp的版本 |
| short-name: | 助记符,tag的一个别名(可选) |
| uri | 用于确定一个唯一的tag库 |
| display-name | 被可视化工具(诸如Jbuilder)用来显示的名称(可选) |
| small-icon | 被可视化工具(诸如Jbuilder)用来显示的小图标(可选) |
| large-icon | 被可视化工具(诸如Jbuilder)用来显示的大图标(可选) |
| description | 对tag库的描述(可选) |
| listener | 一个tag库可能定义一些类做为它的事件侦听类,这些类在TLD中被称为listener 元素,jsp服务器将会实例化这些侦听类,并且注册它们。Listener元素中有一个叫listener-class的子元素,这个元素的值必须是该侦听类的完整类名 |
| tag | tag元素在tag库中需指出它的名字、类名、脚本变量、tag的属性 其中脚本变量的值可以直接在TLD中定义或通过tag附加信息的类来取得 每个属性描述了这个属性是否可以省略,它的值是否可以通过<%= …%> 这样的JSP语法来获得,以及属性的类型 tag子元素如下: name:独一无二的元素名 tag-class:Tag标签对应的tag处理类 tei-class:javax.servlet.jsp.tagext.TagExtraInfo的子类,用于表达脚本变量(可选) body-content:Tag标签body的类型 display-name:被可视化工具(诸如Jbuilder)用来显示的名称(可选) small-icon:被可视化工具(诸如Jbuilder)用来显示的小图标(可选) large-icon:被可视化工具(诸如Jbuilder)用来显示的大图标(可选) description:此tag标签的描述 variable:提供脚本变量的信息(同tei-class)(可选) attribute:Tag标签的属性名 |
Taglib引入方式
jsp文件:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="myjstl" %>
<!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>
<c:out value="${param.username}"/>
</body>
</html>
web.xml
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
...
<jsp-config>
<taglib>
<taglib-uri>myjstl</taglib-uri>
<taglib-location>/WEB-INF/tld/c.tld</taglib-location>
</taglib>
</jsp-config>
...
</web-app>
标准定义标签
jsp Taglib指令tld例子
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!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>collection</title>
</head>
<body>
<c:forEach var="l" items="${list}">
<table>
<th>
<td>编号</td>
<td>姓名</td>
<td>年龄</td>
<td>时间</td>
</th>
<tr>
<td>${l.id}</td>
<td><a href="*****${l.id}">${l.name}</a></td>
<td>${l.age}</td>
<td><a href="*****${l.url}">编辑</a><a href="*****${l.url}">删除</a></td>
</tr>
</table>
</c:forEach>
</body>
</html>
开发自定义标签
开发自定义标签,需使用以下方式:
步骤一:
必须继承一个父类:javax.servlet.jsp.tagext.SimpleTagSupport
每个属性都有对应的getter和setter方法。
重写doTag()或者doStartTag()或doEndTag()方法方法
这个方法负责生成页面内容。
public class TestTag extends TagSupport {
private static final long serialVersionUID = -3382691015235241708L;
@Override
public int doEndTag() throws JspException {
try {
pageContext.getOut().write("MyTag");
return super.doEndTag();
} catch(JspException e) {
e.printStackTrace();
return 0;
} catch(IOException e) {
e.printStackTrace();
return 0;
}
}
@Override
public int doStartTag() {
try {
pageContext.getOut().write("MyTag");
return super.doStartTag();
} catch(JspException e) {
e.printStackTrace();
return 0;
} catch(IOException e) {
e.printStackTrace();
return 0;
}
}
}
步骤二:
建立一个*.tld文件,每个*.tld文件对应一个标签库,每个标签库对应多个标签
注意事项:
TLD(Tag Library Definition)即标签库定义
文件的后缀是tld
每个TLD文件对应一个标签库
一个标签库中可包含多个标签
TLD文件也称为标签库定义文件
标签库定义文件的根元素是taglib
它可以包含多个tag子元素
每个tag子元素都定义一个标签
<?xml version="1.0" encoding="utf-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd" version="2.0">
<tlib-version>1.0</tlib-version>
<short-name>myhelloworld</short-name>
<!-- 定义该标签库的URI 必须添加但可以空-->
<uri/>
<!-- 定义第一个标签 -->
<tag>
<!-- 定义标签名 -->
<name>thisTag</name>
<!-- 定义标签处理类 -->
<tag-class>com.java265.taglib.TestTag</tag-class>
<!-- 定义标签体为空 -->
<body-content>empty</body-content>
</tag>
</taglib>边栏推荐
- 短视频SEO优化教程 自媒体SEO优化技巧方法
- With a monthly salary of 12K, the butterfly changed to a new one and moved forward bravely - she doubled her monthly salary through the career change test~
- Several interview questions about golang concurrency
- security session concurrency management
- 08-SDRAM:汇总
- Use Jenkins for continuous integration, this knowledge point must be mastered
- @WebServlet注解(Servlet注解)
- 如何重装Win11?一键重装Win11方法
- 零基础如何学习单片机,一位入门者的进阶路径,可参考
- DVWA靶场环境搭建
猜你喜欢

NFT工具合集

mysql8安装make报错如何解决

如何重装Win11?一键重装Win11方法

22.支持向量机—高斯核函数

How to get the best power efficiency in Windows 11?

不就是个TCC分布式事务,有那么难吗?

不了解SynchronousQueue?那ArrayBlockingQueue和LinkedBlockingQueue不会也不知道吧?

OpenCV DNN blogFromImage()详解

【解决】win10下emqx启动报错Unable to load emulator DLL、node.db_role = EMQX_NODE__DB_ROLE = core

12306抢票,极限并发带来的思考?
随机推荐
ansible模块--copy模块
使用 Zadig 交付云原生微服务应用
一篇永久摆脱Mysql时区错误问题,idea数据库可视化插件配置
solidity
如何进行数据库备份
短视频SEO搜索运营获客系统功能介绍
Excel文件读写(创建与解析)
Share an interface test project (very worth practicing)
2022 6th Strong Net Cup Part WP
Win11内存管理错误怎么办?
一文概览最实用的 DeFi 工具
asyncawait和promise的区别
在CentOS下安装MySQL
SphereEx Miao Liyao: Database Mesh R&D Practice under Cloud Native Architecture
图解LeetCode——1161. 最大层内元素和(难度:中等)
LeetCode_518_零钱兑换Ⅱ
Several interview questions about golang concurrency
Chrome书签插件,让你实现高效整理
【MySQL系列】 MySQL表的增删改查(进阶)
els 方块变形