自定义标签的步骤

自定义标签的步骤大概有三步:

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>

shortname指明推荐使用的prefix。

uri指明引用这个标签库时使用的uri。

tag指明要定义标签的信息。

其中,tag可以设置的属性如下:

属性

描述

name

定义属性的名称。每个标签的是属性名称必须是唯一的。

tagclass

指定映射的Java类。

required

指定属性是否是必须的或者可选的,如果设置为false为可选。

rtexprvalue

声明在运行表达式时,标签属性是否有效。

type

定义该属性的Java类类型 。默认指定为String。

description

描述信息。

fragment

如果声明了该属性,属性值将被视为一个JspFragment。

bodycontent

指明标签体的限制,有3种取值:empty、JSP和tagdependent
empty:不允许有标签体存在。
JSP:允许有标签体存在。
tagdependent:允许有标签体存在,但是标签体内的JSP代码不会被执行。

如果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>

结果:

[JSP]自定义标签库taglib的更多相关文章

  1. JSP自定义标签库

    总所周知,JSP自定义标签库,主要是为了去掉JSP页面中的JAVA语句 此处以格式化输出时间戳为指定日期格式为例,简单介绍下JSP自定义标签的过程. 编写标签处理类(可继承自javax.servlet ...

  2. jsp 自定义标签库

    自定义标签的作用 *** 自定义标签的主要用于移除jsp页面中java代码 *** JSP页面中使用自定义的标签 使用jsp指令<% @taglib uri="标签库的uri" ...

  3. Java jsp 自定义标签

    1 自定义标签 1.1 引入 需求: 向浏览器输出当前客户的IP地址 (只能使用jsp标签) 1.2 第一个自定义标签开发步骤 1)编写一个普通的java类,继承SimpleTagSupport类,叫 ...

  4. JSP自定义标签的使用简化版

    在jsp中 如果不想页面中出现java代码 这个时候就需要使用到jsp的自定义标签库技术了 自定义标签库 能够有效的减少jsp中java代码的出现 使其更加自然的像html页面一样 如果要使用jsp自 ...

  5. jsp的标签库和自定义标签

    1.jstl标签库 JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. JSTL支持通用的.结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签. ...

  6. JSP 标准标签库(JSTL)

    JSP 标准标签库(JSTL) JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. JSTL支持通用的.结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签, ...

  7. JSP 核心标签库

    1 JSTL标签库介绍 JSTL标签库的使用是为弥补html标签的不足,规范自定义标签的使用而诞生的.使用JSLT标签的目的就是不希望在jsp页面中出现java逻辑代码 2 JSTL标签库分类 核心标 ...

  8. JSP 自定义标签

    0 标签技术的API继承体系 1 作用 jsp自定义标签用于移除页面中的java代码 2 实现 2.1 标签处理类ViewIPTag.java package com.zsm.util; import ...

  9. JSP自定义标签之Hello Costom tag小例子

    1.项目结构 2.实现自定义tag所需依赖 <dependency> <groupId>javax.servlet</groupId> <artifactId ...

随机推荐

  1. Hyper-V3:虚拟机的配置

    在Hyper-V成功新建一台虚拟机,在正式使用之前,必须配置VM使用的硬件资源,并授予用户访问VM的权限等,本文罗列出一些常见的配置,供读者参阅. 一,为虚拟机分配使用的内存 在Hyper-V Man ...

  2. [转]利用URLConnection来发送POST和GET请求

    URL的openConnection()方法将返回一个URLConnection对象,该对象表示应用程序和 URL 之间的通信链接.程序可以通过URLConnection实例向该URL发送请求.读取U ...

  3. 关于Android避免按钮重复点击事件

    最近测试人员测试我们的APP的时候,喜欢快速点击某个按钮,出现一个页面出现多次,测试人员能不能禁止这样.我自己点击了几下,确实存在这个问题,也感觉用户体验不太好.于是乎后来我搜了下加一个方法放在我们U ...

  4. Java版本:识别Json字符串并分隔成Map集合

    前言: 最近又看了点Java的知识,于是想着把CYQ.Data V5迁移到Java版本. 过程发现坑很多,理论上看大部分很相似,实践上代码写起来发现大部分都要重新思考方案. 遇到的C#转Java的一些 ...

  5. Linux+apache+mono+asp.net安装教程

    Linux+apache+mono+asp.net安装教程(CentOS上测试的) 一.准备工作: 1.安装linux系统(CentOS,这个就不多讲了) 2.下载所需软件 http-2.4.4.ta ...

  6. Linux学习日记-MVC的部署(三)

    一.Mvc与wcf 相对WCF的部署MVC还是有点麻烦,我们要考虑哪些dll是不需要的,哪些是要拷贝到本地的. 而WCF因为有些配置文件不支持,我们只需要在配置wcf时不使用配置文件而直接使用代码就行 ...

  7. 【完全开源】知乎日报UWP版:项目结构说明、关键源代码解释

    目录 说明 项目结构 关键代码 演示视频 说明 上一篇博客将源码放出来了,但是并没有做过多的介绍,所以如果自己硬看可能需要花费很长的时间,尤其这些代码并不是自己写的.项目不算复杂但是也不算简单,这篇文 ...

  8. DOM对象模型接口规范中的四个基本接口

    DOM对象模型的四个基本接口 在DOM对象模型接口规范中,有四个基本的接口:Document,Node,NodeList以及NamedNodeMap.在这四个基本接口中,Document接口是对文档进 ...

  9. windows10简单试用(多图,连薛定谔的猫都杀死了)

    为了大家看起来方便,我的截图都是gif的,比较小,但是颜色会有色差,相信大家不介意的 昨天windows10可以下载第一时间就下了玩玩 由于是技术预览,所以不打算替换之前的系统,只装在虚拟机里玩玩就好 ...

  10. Android SQLite调试

    调试SQLite的神器,再也不用自己去打Log了,只需简单的几个命令. adb shell setprop log.tag.SQLiteLog V adb shell setprop log.tag. ...