自定义标签的步骤

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

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. Partition1:新建分区表

    未分区的表,只能存储在一个FileGroup中:对Table进行分区后,每一个分区都存储在一个FileGroup,或分布式存储在不同的FileGroup中.对表进行分区的过程,是将逻辑上完整的一个表, ...

  2. 02.SQLServer性能优化之---牛逼的OSQL----大数据导入

    汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 上一篇:01.SQLServer性能优化之----强大的文件组----分盘存储 http ...

  3. .Net多线程编程—System.Threading.Tasks.Parallel

    System.Threading.Tasks.Parallel类提供了Parallel.Invoke,Parallel.For,Parallel.ForEach这三个静态方法. 1 Parallel. ...

  4. Android公共title的应用

    我们在开发Android应用中,写每一个页面的时候都会建一个title,不是写一个LinearLayout就是写一个RelativeLayout,久而久之就会觉得这样繁琐,尤其几个页面是只是标题不一样 ...

  5. c#多线程

    一.使用线程的理由 1.可以使用线程将代码同其他代码隔离,提高应用程序的可靠性. 2.可以使用线程来简化编码. 3.可以使用线程来实现并发执行. 二.基本知识 1.进程与线程:进程作为操作系统执行程序 ...

  6. JavaScript求两个数字之间所有数字的和

    这是在fcc上的中级算法中的第一题,拉出来的原因并不是因为有什么好说的,而是我刚看时以为是求两个数字的和, 很显然错了.我感觉自己的文字理解能力被严重鄙视了- -.故拉出来折腾折腾. 要求: 给你一个 ...

  7. “此网页上的某个 Web 部件或 Web 表单控件无法显示或导入。找不到该类型,或该类型未注册为安全类型。”

    自从vs装了Resharper,看见提示总是手贱的想去改掉它.于是乎手一抖,把一个 可视web部件的命名空间给改了. 喏,从LibrarySharePoint.WebPart.LibraryAddEd ...

  8. SharePoint2016安装的过程的”Microsoft.SharePoint.Upgrade.SPUpgradeException”错误解决方法

    前提 在windows server 2012的服务器上运行安装sharepoint2016出现如下错误: Could not load file or assembly ‘Microsoft.Dat ...

  9. Android种使用Notification实现通知管理以及自定义通知栏(Notification示例四)

    示例一:实现通知栏管理 当针对相同类型的事件多次发出通知,作为开发者,应该避免使用全新的通知,这时就应该考虑更新之前通知栏的一些值来达到提醒用户的目的.例如我们手机的短信系统,当不断有新消息传来时,我 ...

  10. sql server 取文件名函数 转载

    /****** Object: UserDefinedFunction [dbo].[GetDirectoryPath] Script Date: 2016-12-16 16:54:05 ****** ...