自定义标签的步骤

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

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. Could not create SSL connection through proxy serve-svn

    RA layer request failedsvn: Unable to connect to a repository at URL xxxxxx 最后:Could not create SSL ...

  2. 【原创分享·微信支付】 C# MVC 微信支付教程系列之扫码支付

    微信支付教程系列之扫码支付                  今天,我们来一起探讨一下这个微信扫码支付.何为扫码支付呢?这里面,扫的码就是二维码了,就是我们经常扫一扫的那种二维码图片,例如,我们自己添 ...

  3. Kooboo CMS技术文档之一:Kooboo CMS技术背景

    语言平台 依赖注入方案 存储模型 1. 语言平台 Kooboo CMS基于.NET Framework 4.x,.NET Framework 4.x的一些技术特性成为站点开发人员使用Kooboo CM ...

  4. Div Vertical Menu ver5

    这个小功能,如果是算此次,已经是第5次修改了.可以从这里看到前4次:V1, http://www.cnblogs.com/insus/archive/2011/10/17/2215637.html V ...

  5. bash字符串操作

    参考 http://www.cnblogs.com/chengmo/archive/2010/10/02/1841355.html 问题:bash怎么提取字符串的最后一位?例如python中strin ...

  6. 【转】Android开发中让你省时省力的方法、类、接口

    转载 http://www.toutiao.com/i6362292864885457410/?tt_from=mobile_qq&utm_campaign=client_share& ...

  7. mysql 赋予用户权限

    # 赋予权限MySQL> grant 权限参数 on 数据库名称.表名称 to 用户名@用户地址 identified by '用户密码'; # 立即生效权限MySQL> flush pr ...

  8. linux中kvm的安装及快照管理

    一.kvm的安装及状态查看 1.安装软件 yum -y install kvm virt-manager libvirt2.启动libvirtd 报错,升级device-mapper-libs yum ...

  9. angularJS(5)

    angularJS(5) 一,数据循环:特别要注意作用域 使用ng-repeat指令. <div ng-app="myApp" ng-controller="myC ...

  10. 菜鸟在C语言编译,链接时可能遇到的两个问题

    最近在看 CSAPP (Computer Systems A Programmers Perspective 2nd) 的第七章 链接.学到了点东西,跟大家分享.下文中的例子都是出自CSAPP第七章. ...