自定义标签的步骤

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

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. ajax

    常见的HTTP状态码状态码:200 请求成功.一般用于GET和POST方法 OK301 资源移动.所请求资源移动到新的URL,浏览器自动跳转到新的URL Moved Permanently304 未修 ...

  2. 如何创建Vim Dotfile?

    Dotfile是电脑系统里的隐藏文件,它是专门给更高级的用户,如开发者.程序员或工程师使用的,让他们用来调整系统.如何创建Vim-Dotfile? 可以参考以下步骤: 1. 首先,你要检查一下.vim ...

  3. JavaScript Date对象

    本篇主要介绍 Date 日期和时间对象的操作. 目录 1. 介绍:阐述 Date 对象. 2. 构造函数:介绍 Date 对象的构造函数new Date()几种方式. 3. 实例方法:介绍 Date ...

  4. mybatis_开发篇

    一.使用mybatis的动态代理方式开发 需求:这里以crm系统中分页条件查询所有的客户信息的功能为例? 1.创建工程 2.引入所需的jar包 3.引入日志文件.数据库连接参数的配置文件等 4.创建m ...

  5. 开源免费且稳定实用的.NET PDF打印组件itextSharp(.NET组件介绍之八)

    在这个.NET组件的介绍系列中,受到了很多园友的支持,一些园友(如:数据之巅. [秦时明月]等等这些大神 )也给我提出了对应的建议,我正在努力去改正,有不足之处还望大家多多包涵.在传播一些简单的知识的 ...

  6. css3圆形百分比进度条的实现原理

    原文地址:css3圆形百分比进度条的实现原理 今天早上起来在查看jquery插件机制的时候,一不小心点进了css3圆形百分比进度条的相关文章,于是一发不可收拾,开始折腾了... 关于圆形圈的实现,想必 ...

  7. 面向对象相关知识点xmind

  8. windows10安装mysql5.7.17是这样安装的吗?

    操作 全允许

  9. Linux基础介绍【第九篇】

    服务器添加3块磁盘的体系结构 [root@oldboylinux test]# free -m              total used free shared buffers cached M ...

  10. Configure a bridged network interface for KVM using RHEL 5.4 or later?

    environment Red Hat Enterprise Linux 5.4 or later Red Hat Enterprise Linux 6.0 or later KVM virtual ...