当前位置:网站首页>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>
边栏推荐
猜你喜欢
随机推荐
多御安全浏览器android版更新至1.7,改进加密协议
电机原理动图合集
@Transactional 注解使用详解
How to solve the error when mysql8 installs make
字节跳动面试官:请你实现一个大文件上传和断点续传
els 方块边界变形处理
工件SSMwar exploded 部署工件时出错。请参阅服务器日志了解详细信息
如何优雅的消除系统重复代码
很多人喜欢用多御安全浏览器,竟是因为这些原因
类型“FC<Props>”的参数不能赋给类型“ForwardRefRenderFunction<unknown, Props>”的参数。 属性“defaultProps”的类型不兼容。 不
如何发现新的潜力项目?工具推荐
SphereEx Miao Liyao: Database Mesh R&D Practice under Cloud Native Architecture
REST会消失吗?事件驱动架构如何搭建?
08-SDRAM:汇总
Deliver cloud-native microservices applications with Zadig
DOM 事件及事件委托
security CSRF漏洞保护
Various Joins of Sql
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~
短视频SEO搜索运营获客系统功能介绍