从jsp1.1开始就可以在jsp页面中使用自定义标签了,使用自定义标签不但可以实现代码重用,而且可以使jsp代码更简洁。Jsp2.0的标签扩展API中又增加了SimpleTag接口和其实现类SimpleTagSupport。

 
标签扩展API层次结构:
 

TLD文件元素详解:

每个自定义标签都必须在TLD文件中声明,TLD文件只不过是一个XML文件。根元素是<taglib>,它包含一个或者多个<tag>标签,该元素用来声明定制标签。<taglib>元素中只有<tlib-version>元素是必须的,其他都是可选的。

TLD文件中的元素

标  签

含  义

<taglib>

TLD文件的根元素

<tlib-version>

此标签库的版本

<jsp-version>

此标签库依赖的JSP版本。

<short-name>

<description>

<display-name>

<icon>

<uri>

<validator>

<listener>

<function>

当在JSP中使用标签时,此标签库首选或者建议的前缀。当然可以完全忽略这个建议

描述信息

图形工具可显示的一个简短名称

图形工具可显示的图标

指定使用该标签库中标签的URI

关于该库的TagLibraryValidator信息

指定事件监听器类

定义一个在EL中使用的函数

<tag>

定义一个标签

<tag>元素的子元素

标  签

含  义

<description>

<display-name>

<icon>

<name>

指定针对标签的信息

开发工具用于显示的一个简短名称

可被开发工具使用的图标

标签名称

<tag-class>

<tei-class>

Java标签处理器类的名称。注意这是处理器类的全限定名称,比如com.xx.tag.TableTag

Javax.servlet.jsp.tagext.TagExtraInfo类的一个可选子类

<body-content>

<variable>

<example>

此标签的主体部分的内容。其值可为scriptless\tagdependent\empty,默认为empty

定义脚本变量信息

使用该标签例子的可选的非正式描述

<attribute>

包含了此标签的一个属性的元数据

<attribute>的子元素

标  签

含  义

<description>

<name>

有关描述的文本信息

在jsp标签中使用的属性名称

<required>

<rtexprvalue>

<type>

指定属性是必须的还是可选的,默认为false,表示属性可选。如果该值为true,则jsp页面必须为该属性提供一个值。可能的值true、false、yes、no

指定属性是否能接受请求时表达式的值,默认为false,表示不能接受请求时表达式的值。可能值:true、false、yes、no

属性的数据类型,该元素只能用在当<rtexprvalue>设置为true时。它指定当使用请求时属性表达式(<%= %>)返回类型。默认string

实例(继承SimpleTagSupport类方式):

编写一个DateTag标签,输出系统时间。<c1:date/>,输出的格式:2011年11月9日

step1: 写一个java类,继承SimpleTagSupport类

step2:override doTag()方法,在该方法里,实现相应的处理逻辑

package mytag;

import java.io.IOException;

import java.text.SimpleDateFormat;

import java.util.Date;

import javax.servlet.jsp.JspException;

import javax.servlet.jsp.JspWriter;

import javax.servlet.jsp.PageContext;

import javax.servlet.jsp.tagext.SimpleTagSupport;

public class DateTag extends SimpleTagSupport{

@Override

public void doTag() throws JspException, IOException {

PageContext ctx = (PageContext)getJspContext();

JspWriter out = ctx.getOut();

SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");

out.println(sdf.format(new Date()));

}

}

step3: 在.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 http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"

version="2.0">

<tlib-version>1.1</tlib-version>

<short-name>c1</short-name>

<uri>http://www.tarena.com.cn/mytag1</uri>

<tag>

<name>date</name>

<tag-class>mytag.DateTag</tag-class>

<body-content>empty</body-content>

</tag>

</taglib>

step4: 使用taglib导入标签(jsp中)

<%@taglib prefix="c1" uri="http://www.tarena.com.cn/mytag1" %>

<c1:date/>

自定义jstl标签开发的更多相关文章

  1. 自定义JSTL标签和函数库

    一.自定义JSTL标签 1.编写标签处理类: (1)实现 SimpleTag 接口,通过 setJspContext()方法可以获取到 jspContext 对象,实际上也是 pageContext ...

  2. 如何自定义JSTL标签与SpringMVC 标签的属性中套JSTL标签报错的解决方法

    如何自定义JSTL标签 1.创建一个类,从SimpleTagSupport继承 A) 通过继承可以获得当前JSP页面上的对象,如JspContext I) 实际上可以强转为PageContext II ...

  3. 自定义EL函数、自定义JSTL标签

    自定义EL函数 1.做一个类(静态) package com.maya.el; public class ELBiaoDaoShi { public static String TiHuan(Stri ...

  4. 自定义jstl标签库

    开发环境:Spring+SpringMVC +Maven +Mybatis JSTL 标签库的配置: 导入对应的 jstl.jar 和 standard.jar ,我使用的配置如下: <prop ...

  5. (十三)自定义JSTL标签

    前面的博客,我们讲过了 自定义 el函数 : 讲一个 自定义标签技术 : 目录 自定义标签 快速入门:使用标签输出客户机IP 关于标签处理器类的方法 自定义标签功能扩展 传统标签 简单标签 配置简单标 ...

  6. 自定义jstl标签*

    原文链接:https://www.it610.com/article/442039.htm 步骤如下: 1.写tld文档:用来指定标签的名字,标签库等. 2.写标签处理器类. 3.配置到web.xml ...

  7. 【JSP】自定义标签开发入门

    JSP 自定义标签 自定义标签是用户定义的JSP语言元素.当JSP页面包含一个自定义标签时将被转化为servlet,标签转化为对被 称为tag handler的对象的操作,即当servlet执行时We ...

  8. EL表达式、JSTL标签库

    一.EL(Expression Language)表达式 语法结构:${var} 若要停用对EL表达式的评估的话,需要使用page指令将isELIgnored属性值设为true: <%@ pag ...

  9. JSP学习笔记(3)——JSTL 标签库

    JSP Standard Tag Lib,名为JSP标准标签库,设计的目的主要用来方便我们将数据输出,而不是使用JSP中的语法<% %> <%= %> <%! %> ...

随机推荐

  1. js 函数function的几种形式

    //有的时候我们一直都在使用函数,但是却不知道函数使用的正真含义 //其中一个重要的目的是为了提高代码的复用率 //其二函数可以传递参数并有返回值 //函数声明 //不带参数,不带返回值 functi ...

  2. IIS7下,flush无效,解决方案

    打开文件 C:\Windows\System32\inetsrv\config\applicationHost.config ,注意如果你的是64位系统,这个文件就必须用64位的编辑软件打开,32位的 ...

  3. linux地址空间划分

    LDD讲的很明白了: Linux 是一个虚拟内存系统, 意味着用户程序见到的地址不直接对应于硬件使用的物理地址. 虚拟内存引入了一个间接层, 它允许了许多好事情. 有了虚拟内存, 系统重运行的程序可以 ...

  4. JS基础学习1——什么是基础js类和原型?

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. 基于Vivado HLS在zedboard中的Sobel滤波算法实现

     基于Vivado HLS在zedboard中的Sobel滤波算法实现 平台:zedboard  + Webcam 工具:g++4.6  + VIVADO HLS  + XILINX EDK + ...

  6. CentOS学习笔记--系统服务 (daemons)

    系统服务 (daemons) 系统为了某些功能必须要提供一些服务 (不论是系统本身还是网络方面),这个服务就称为 service . 但是 service 的提供总是需要程序的运行吧!否则如何运行呢? ...

  7. Spring Controller 获取请求参数的几种方法

    1.直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交.若"Content-Type"="application/ ...

  8. sql 基本操作

    SQL基本操作   一数据类型1整数型 int2精确数值型 decimal(n,p)n为总位数,p为小数位数3浮点型 float4字符型char(n)n最大为4,varchar(n)5日期型datat ...

  9. ContentProvider与ContentResolver使用【转】

    这篇文章被转载而转载者未注明原文出处,在此未加上原文地址链接,本人向原作者致以歉意. 下面是文章内容: 使用ContentProvider共享数据: 当应用继承ContentProvider类,并重写 ...

  10. opensuse 安装 Anaconda3 之后出现Could not start d-bus. Can you call qdbus?

    最近在安装了opensue Leap42.1之后,想要学习一下python,就安装了Anaconda3,并且将Anaconda3的安装路径添加到了PATH里,但是在重新启动系统后,出现了"C ...