[JSP]自定义标签库taglib
自定义标签的步骤
自定义标签的步骤大概有三步:
1.继承javax.servlet.jsp.tagext.*下提供的几个标签类,如Tag、TagSupport、BodyTagSupport、SimpleTagSupport(JSP2.0)。
2.在tld文件中配置标签库信息,以及标签与实现类的映射。
3.在jsp文件中引用自定义标签。
标签API
Tag接口
doEndTag():执行当前标签实例的结束标签。在doStartTag()执行后调用
doStartTag():执行当前标签实例的开始标签。
getParent():获取当前标签的父标签
release():释放当前标签的状态
setPageContext(PageContext):设置当前标签的页面
setParent(Tag):设置当前标签的父标签
TagSupport类
TagSupport类是实现Tag接口的一个模板类。它实现了Tag接口的大部分方法,用户只需要实现doStartTag()和doEndTag()方法。
SimpleTag接口(JSP2.0)
JSP2.0的接口,比Tag接口更简单。
doTag():执行当前标签的所有处理任务。
getParent():获取当前标签的父标签。
setJspBody(JspFragment):提供当前标签的实体为一个JspFragment对象
setJspContext(JspContext):设置JSP页面的
setParent(JspTag):设置当前标签的父标签。
SimpleTagSupport类(JSP2.0)
SimpleTagSupport类是实现SimpleTag接口的一个模板类。它实现了SimpleTag接口的大部分方法,用户只需要实现doTag()方法。
tld标签库描述文件
tld全称为Tag Library Description,即标签库描述文件。
tld文件用来配置标签库的基本信息。
taglib主要元素
taglib.tld
<?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"> <tlibversion>1.0</tlibversion> <jspversion>2.0</jspversion> <shortname>taglib</shortname> <uri>http://notes.javaee.jsp.com/taglib</uri> <info>Private Taglib</info> <tag> <name>copyright</name> <tagclass>notes.javaee.jsp.taglib.Copyright</tagclass> <bodycontent>JSP</bodycontent> <info>Copyright tag.</info> </tag> </taglib> |
l shortname指明推荐使用的prefix。
l uri指明引用这个标签库时使用的uri。
l tag指明要定义标签的信息。
其中,tag可以设置的属性如下:
属性 |
描述 |
name |
定义属性的名称。每个标签的是属性名称必须是唯一的。 |
tagclass |
指定映射的Java类。 |
required |
指定属性是否是必须的或者可选的,如果设置为false为可选。 |
rtexprvalue |
声明在运行表达式时,标签属性是否有效。 |
type |
定义该属性的Java类类型 。默认指定为String。 |
description |
描述信息。 |
fragment |
如果声明了该属性,属性值将被视为一个JspFragment。 |
bodycontent |
指明标签体的限制,有3种取值:empty、JSP和tagdependent |
如果tld文件位于/WEB-INF/下面,Tomcat会自动加载tld文件中的标签库。如果位于其他的位置,可以在web.xml中配置。
<jsp-config> <taglib> <taglib-uri>http://notes.javaee.jsp.com/taglib</taglib-uri> <taglib-location>/WEB-INF/taglib.tld</taglib-location> </taglib> </jsp-config> |
或者在JSP中直接使用
<%@ taglib uri="/WEB-INF/taglib.tld" prefix="taglib"%> |
实例
使用TagSupport自定义标签
1. 继承标签API
定义一个HelloTag类,继承TagSupport类。
HelloTag.java:
package notes.javaee.jsp.taglib; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.TagSupport; public class HelloTag extends TagSupport { private static final long serialVersionUID = -8828591126748246256L; private String name; @Override public int doEndTag() throws JspException { try { this.pageContext.getOut().println("Hello, " + name); } catch (Exception e) { throw new JspException(e); } return EVAL_PAGE; } public String getName() { return name; } public void setName(String name) { this.name = name; } } |
2. 在tld中配置标签库信息
在/WEB-INF下新建taglib.tld文件。
<shortname>指明推荐使用的prefix为taglib。
<uri>指明引用这个标签库时使用的uri为http://notes.javaee.jsp.com/taglib。
<tag>定义要引用的标签信息。<name>指明标签名,<tagclass>指明映射的Java类,和前面的对应。
然后定义这个标签的属性。因为前面Java类中的属性为name,这里也要对应上。
taglib.tld:
<?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"> <tlibversion>1.0</tlibversion> <jspversion>2.0</jspversion> <shortname>taglib</shortname> <uri>http://notes.javaee.jsp.com/taglib</uri> <info>Private Taglib</info> <tag> <name>hello</name> <tagclass>notes.javaee.jsp.taglib.HelloTag</tagclass> <bodycontent>empty</bodycontent> <info>Hello tag with parameters.</info> <attribute> <name>name</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib> |
3. 在jsp文件中引用标签
前面在tld文件中配置了各个关键信息,现在就可以直接在jsp文件中使用了。
首先,需要在jsp文件中引入标签库文件。这里和标准标签库JSTL一样,使用taglib关键字来说明要引入的是标签库。uri是引入地址,prefix是标签库关键字。
<%@ taglib uri="http://notes.javaee.jsp.com/taglib"prefix="taglib"%>
由于前面定义的标签name为hello,所以可以使用的标签名为:prefix+name,即:taglib:hello。
Hello.jsp:
<%@ page language="java"contentType="text/html; charset=UTF-8"%> <%@ taglib uri="http://notes.javaee.jsp.com/taglib"prefix="taglib"%> <html> <head> <meta http-equiv="Content-Type"content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <taglib:hello name="World"/> <br/> </body> </html> |
结果:
使用SimpleTagSupport自定义标签(JSP2.0)
1. 继承标签API
定义一个HelloTag类,继承SimpleTagSupport类。
PersonTag.java:
package notes.javaee.jsp.taglib2; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.SimpleTagSupport; public class PersonTag extends SimpleTagSupport { private String name; private String sex; private int age; @Override public void doTag() throws JspException, IOException { this.getJspContext().getOut().write( "[Person Info]name: " + name + ", sex: " + sex + ", age:" + age); } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } |
2.在tld中配置标签库信息
在/WEB-INF下新建taglib.tld文件。
关键配置信息基本和使用TagSupport自定义标签范例中一样。但是由于对应Java类中有3个属性,需要一一对应上。
taglib.tld:
<?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"> <tlibversion>1.0</tlibversion> <jspversion>2.0</jspversion> <shortname>taglib</shortname> <uri>http://notes.javaee.jsp.com/taglib</uri> <info>Private Taglib</info> <tag> <name>person</name> <tagclass>notes.javaee.jsp.taglib2.PersonTag</tagclass> <bodycontent>empty</bodycontent> <info>person info tag</info> <attribute> <name>name</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>sex</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>age</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib> |
3.在jsp文件中引用标签
引用标签方式和使用TagSupport自定义标签范例一样。
personTag.jsp:
<%@ page language="java"contentType="text/html; charset=UTF-8"%> <%@ taglib uri="http://notes.javaee.jsp.com/taglib"prefix="taglib"%> <html> <head> <meta http-equiv="Content-Type"content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <taglib:person name="Alex"sex="man" age="18"/> </body> </html> |
结果:
本文转自静默虚空博客园博客,原文链接:http://www.cnblogs.com/jingmoxukong/p/5318716.html,如需转载请自行联系原作者
[JSP]自定义标签库taglib相关推荐
- java 自定义taglib_[JSP]自定义标签库taglib
自定义标签的步骤大概有三步: 1.继承javax.servlet.jsp.tagext.*下提供的几个标签类,如Tag.TagSupport.BodyTagSupport.SimpleTagSuppo ...
- jsp自定义标签分页taglib
文章目录 一.加入tomcat的dependencies 二.需要一个mytag.tld 三.构建pageBean 四.PagerTag 五.jsp 提示:以下是本篇文章正文内容,下面案例可供参考 一 ...
- JSP标签库Taglib之自定义function篇,轻松实现日期格式化
一.什么是Taglib? 如果你曾使用JSP页面来作为渲染视图的话,我相信你对JSTL标签库一定不会感到陌生. 比如: 1.forEach代码片段 <c:forEach var="i& ...
- jsp自定义标签(taglib)编写的原理和实现
jsp自定义标签(taglib)编写的原理和实现 转:http://www.javaeye.com/topic/157737 个tag就是一个普通的java类,它惟一特别之处是它必须继承TagSupp ...
- php taglib.php,thinkphp5 taglib_pre_load预加载自定义标签库
文章内容来自官方手册,需要查看详细的可以访问来源网址. 模板中加载标签库,预加载自定义标签库,扩展内置标签库的加载 下面以标签库放在common作为一个示例: namespace app\common ...
- javaweb学习总结(二十三)——jsp自定义标签开发入门
一.自定义标签的作用 自定义标签主要用于移除Jsp页面中的java代码. 二.自定义标签开发和使用 2.1.自定义标签开发步骤 1.编写一个实现Tag接口的Java类(标签处理器类) 1 packag ...
- 如何使用jsp自定义标签 JspTag 使用入门
java开发中,sturts标签和c标签就是我们常用的两种标签,本文主要教大家如何定义自己的标签,已达到代码整合,公共化的目的.通过jsp自定义标签,可以将一个元素,或者一个表格,一个div甚至整个页 ...
- JSP自定义标签开发与打包
前言:最近用到JSP的自定义标签,于是到网上寻找资料,结果发现很多的网上教程要么不全要么就是步骤流程错误,尤其是将自定义标签打jar包这一过程,按照网上的教程操作,结果被坑惨了,所以才有现在这一篇博文 ...
- JSP标准标签库(JSTL)--简介
JSP 标准标签库(JSTL) JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. JSTL支持通用的.结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签, ...
最新文章
- Android开发——异步任务中Activity销毁时的问题
- b类 蚂蚁金服_股权设计与合伙制,解析蚂蚁金服与华为的顶层结构
- es6 --- 异步迭代生成器 Promise
- UDT源码剖析(三):UDT::startup()过程代码注释
- 操作系统 cpu调度_CPU调度| 操作系统
- C语言运算符的优先级及结合性
- 滚动到div的底部?
- C++主线程与子线程的关系
- 初识Hadoop入门介绍
- 开源自动化运维工具_批量与重复运维压力如何破?了解一下这款自动化运维工具...
- Activiti流程引擎与业务整合方案
- 服务器密码忘记处理之二:重置密码
- 百万富翁 混淆电路
- 主流漫游技术-OKC802.11r介绍
- 20172328 2018-2019《Java软件结构与数据结构》第六周学习总结
- NPN增量型编码器接线原理及测试
- 征信为民守初心!《征信业管理条例》颁布十周年
- 不纠缠的协议书怎么写_保证书互不纠缠怎么写
- 差动直流放大电路仿真 -- 单端输入,双端输入,共模,差模(附Multisim)
- SQLServer中服务器角色和数据库角色权限详解角色
热门文章
- 初二因式分解奥数竞赛题_八年级数学因式分解专项练习试题.doc
- python 递归的最大层数_练习题-Python的最大递归层数
- python 清空文件夹_别这样直接运行Python命令,否则电脑等于“裸奔”
- tcpip网络编程 尹圣雨源码_网络编程——学习笔记
- C++内存泄漏的几种情况
- c++ 栈中如何给string malloc空间_malloc,free,calloc,realloc函数
- vue element form 默认校验
- linux 日志 \var\log
- AudioContext
- postgresql user表