[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 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" |
实例
使用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 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 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> |
结果:
[JSP]自定义标签库taglib的更多相关文章
- JSP自定义标签库
总所周知,JSP自定义标签库,主要是为了去掉JSP页面中的JAVA语句 此处以格式化输出时间戳为指定日期格式为例,简单介绍下JSP自定义标签的过程. 编写标签处理类(可继承自javax.servlet ...
- jsp 自定义标签库
自定义标签的作用 *** 自定义标签的主要用于移除jsp页面中java代码 *** JSP页面中使用自定义的标签 使用jsp指令<% @taglib uri="标签库的uri" ...
- Java jsp 自定义标签
1 自定义标签 1.1 引入 需求: 向浏览器输出当前客户的IP地址 (只能使用jsp标签) 1.2 第一个自定义标签开发步骤 1)编写一个普通的java类,继承SimpleTagSupport类,叫 ...
- JSP自定义标签的使用简化版
在jsp中 如果不想页面中出现java代码 这个时候就需要使用到jsp的自定义标签库技术了 自定义标签库 能够有效的减少jsp中java代码的出现 使其更加自然的像html页面一样 如果要使用jsp自 ...
- jsp的标签库和自定义标签
1.jstl标签库 JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. JSTL支持通用的.结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签. ...
- JSP 标准标签库(JSTL)
JSP 标准标签库(JSTL) JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. JSTL支持通用的.结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签, ...
- JSP 核心标签库
1 JSTL标签库介绍 JSTL标签库的使用是为弥补html标签的不足,规范自定义标签的使用而诞生的.使用JSLT标签的目的就是不希望在jsp页面中出现java逻辑代码 2 JSTL标签库分类 核心标 ...
- JSP 自定义标签
0 标签技术的API继承体系 1 作用 jsp自定义标签用于移除页面中的java代码 2 实现 2.1 标签处理类ViewIPTag.java package com.zsm.util; import ...
- JSP自定义标签之Hello Costom tag小例子
1.项目结构 2.实现自定义tag所需依赖 <dependency> <groupId>javax.servlet</groupId> <artifactId ...
随机推荐
- Hyper-V3:虚拟机的配置
在Hyper-V成功新建一台虚拟机,在正式使用之前,必须配置VM使用的硬件资源,并授予用户访问VM的权限等,本文罗列出一些常见的配置,供读者参阅. 一,为虚拟机分配使用的内存 在Hyper-V Man ...
- [转]利用URLConnection来发送POST和GET请求
URL的openConnection()方法将返回一个URLConnection对象,该对象表示应用程序和 URL 之间的通信链接.程序可以通过URLConnection实例向该URL发送请求.读取U ...
- 关于Android避免按钮重复点击事件
最近测试人员测试我们的APP的时候,喜欢快速点击某个按钮,出现一个页面出现多次,测试人员能不能禁止这样.我自己点击了几下,确实存在这个问题,也感觉用户体验不太好.于是乎后来我搜了下加一个方法放在我们U ...
- Java版本:识别Json字符串并分隔成Map集合
前言: 最近又看了点Java的知识,于是想着把CYQ.Data V5迁移到Java版本. 过程发现坑很多,理论上看大部分很相似,实践上代码写起来发现大部分都要重新思考方案. 遇到的C#转Java的一些 ...
- Linux+apache+mono+asp.net安装教程
Linux+apache+mono+asp.net安装教程(CentOS上测试的) 一.准备工作: 1.安装linux系统(CentOS,这个就不多讲了) 2.下载所需软件 http-2.4.4.ta ...
- Linux学习日记-MVC的部署(三)
一.Mvc与wcf 相对WCF的部署MVC还是有点麻烦,我们要考虑哪些dll是不需要的,哪些是要拷贝到本地的. 而WCF因为有些配置文件不支持,我们只需要在配置wcf时不使用配置文件而直接使用代码就行 ...
- 【完全开源】知乎日报UWP版:项目结构说明、关键源代码解释
目录 说明 项目结构 关键代码 演示视频 说明 上一篇博客将源码放出来了,但是并没有做过多的介绍,所以如果自己硬看可能需要花费很长的时间,尤其这些代码并不是自己写的.项目不算复杂但是也不算简单,这篇文 ...
- DOM对象模型接口规范中的四个基本接口
DOM对象模型的四个基本接口 在DOM对象模型接口规范中,有四个基本的接口:Document,Node,NodeList以及NamedNodeMap.在这四个基本接口中,Document接口是对文档进 ...
- windows10简单试用(多图,连薛定谔的猫都杀死了)
为了大家看起来方便,我的截图都是gif的,比较小,但是颜色会有色差,相信大家不介意的 昨天windows10可以下载第一时间就下了玩玩 由于是技术预览,所以不打算替换之前的系统,只装在虚拟机里玩玩就好 ...
- Android SQLite调试
调试SQLite的神器,再也不用自己去打Log了,只需简单的几个命令. adb shell setprop log.tag.SQLiteLog V adb shell setprop log.tag. ...