1、实现Tag接口:

TagSupport类实现了Tag接口,为我们提供了4个重要的方法(见表6-5)。

1.1、 TagSupport类中的常用方法

          int doStartTag():

遇到自定义标签开始时调用该方法,

其可选返回值如下。

SKIP_BODY:表示不用处理标签体,

直接调用doEndTag()方法

EVAL_BODY_INCLUDE:正常执行

标签体,但不对标签体做任何处理

int doAfterBody():

重复执行标签体内容的方法,
其可选返回值如下。SKIP_BODY:表示不用处理标签体,直接调用doEndTag()方法EVAL_BODY_AGAIN:重复执行标签体内容

int doEndTag():

遇到自定义标签结束时调用该方法,

其可选返回值如下。

SKIP_PAGE:忽略标签后面的JSP

内容,中止JSP页面执行

EVAL_PAGE:处理标签后,继

续处理JSP后面的内容

void release():

释放获得的所有资源

参考代码:

package com.rhythmk.web.tag;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date; import javax.management.RuntimeErrorException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport; /*
* 输出当前时间
* */
public class ViewTimeTag extends TagSupport { @Override
public int doStartTag() throws JspException { HttpServletRequest request=(HttpServletRequest) this.pageContext.getRequest();
JspWriter out=this.pageContext.getOut(); Date date=new Date();
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try {
out.print(df.format(date));
} catch (IOException e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);
} return super.doStartTag();
}
}
 
 

2、创建 *.tld文件:

路径:/WebRoot/WEB-INF/rhythmk.tld

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>rhythmk</short-name>
<uri>http://www.rhythmk.com</uri>
<description>rhythmk library</description> <tag>
<name>ViewTime</name>
<tag-class>com.rhythmk.web.tag.ViewTimeTag</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>

3、引入标记到JSP页码:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%@ taglib  uri="http://www.rhythmk.com"  prefix="rhythmk"  %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>JSP 自定义标签 </title>
</head> <body>
当前时间为:
<rhythmk:ViewTime/>
</body>
</html>

简单标签体开发:

继承 “SimpleTagSupport”  实现 doTag 方法:

package com.rhythmk.web.tag;

import java.io.IOException;
import java.io.StringWriter; import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.SimpleTagSupport; /*
* 简单标签
* */ public class SimpleTagDemo1 extends SimpleTagSupport { @Override
public void doTag() throws JspException, IOException { JspFragment jf=this.getJspBody();
/* 循环输出标签内容5次 */
for(int i=0;i<5;i++)
{
jf.invoke(null);
} // 修改标签内容 StringWriter sw=new StringWriter();
// 获取标签内容
jf.invoke(sw);
String content= "<br/><b>"+ sw.toString()+"被修改了<b/>";
// 写入页面
this.getJspContext().getOut().write(content); } }

配置如下:

...... 

<tag>
<name>SimpleTagDemo1</name>
<tag-class>com.rhythmk.web.tag.SimpleTagDemo1</tag-class>
<body-content>scriptless</body-content>
</tag> ......

调用方法:

<%@ taglib  uri="http://www.rhythmk.com"  prefix="rhythmk"  %>
<rhythmk:SimpleTagDemo1>
标签内容
</rhythmk:SimpleTagDemo1>

Rhythmk 一步一步学 JAVA(7): jsp 自定义标签的更多相关文章

  1. java JSP自定义标签

    来至: http://blog.csdn.net/jiangwei0910410003/article/details/23915373 http://blog.csdn.net/jiangwei09 ...

  2. Java jsp 自定义标签

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

  3. Java基础83 JSP标签及jsp自定义标签(网页知识)

    1.JSP标签 替代jsp脚本,用于jsp中执行java代码1.1.内置标签:  <jsp:forward></jsp:forward>  相当于:request.getReu ...

  4. Java之 jstl 自定义标签的方法

    1.写一个Java类 我的路径是写再tag包中的一个 HelloTag类 package tag; import java.io.IOException; import javax.servlet.j ...

  5. 从0开始学Java——从jsp到servlet转换的各种辅助元素介绍

    1. 指示元素,<%@指示元素 [属性=值]* %> 其中指示元素包括page, include, 和tablib三个. 其中  属性=值 可以有多对. 其中page用来告知容器如何转译目 ...

  6. 学JAVA二十一天,自定义数组

    今天就说一下自定义数组,至于要怎么用,我也不知道,反正逼格挺高的. 闲话不多说,开始: 首先,自定义数组首先要创建一个类,用来做自定义数组的类型. public class User{ private ...

  7. Java Web 自定义标签

    1.   自定义标签 由于在JSP页面中直接嵌入Java代码会导致页面开起来非常混乱,不方便和美工等配合工作,为此,JSP提供了自定义标签技术,可以代替直接嵌入Java代码的方式提供动态逻辑,但自定义 ...

  8. Java精选笔记_自定义标签

    自定义标签 自定义标签入门 什么是自定义标签 自定义标签可以有效地将HTML代码与Java代码分离,从而使不懂Java编程的HTML设计人员也可以编写出功能强大的JSP页面 JSP规范中定义了多个用于 ...

  9. JSP高级功能-java之JSP学习第三天(非原创)

    文章大纲 一.JSP 标准标签库(JSTL)二.JSP 连接数据库三.JSP XML 数据处理四.JSP JavaBean五.JSP 自定义标签六.JSP 表达式语言七.JSP 异常处理八.JSP 调 ...

随机推荐

  1. Spring 学习笔记(一)

    # IOC, DI # ApplicationContext.xml 描述类之间的依赖注入关系 # 初始化Bean工厂的两种方式 ## ClassPathXmlApplicationContext # ...

  2. MySQL 实用技巧

    概述: MySQL有许多实用的技巧,利用这些技巧能提高工作的效率,减少一些不必要的麻烦.以下是几个我在MySQL日常维护从常用的技巧. 一.prompt 命令 功能:设置mysql客户端提示符 说明: ...

  3. test20190320

    全连 \(n\leq 10^6\) ,保证答案在 \(long\ long​\) 范围内. 比较浅显的 \(dp\ ?\) 记 \(f[i]\) 表示考虑前 \(i\) 个音符,其中第 \(i\) 个 ...

  4. BZOJ1131 POI2008 Sta 【树形DP】

    BZOJ1131 POI2008 Sta Description 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 Input 给出一个数字N,代表有N个点.N<=10 ...

  5. (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序

    每次使用 Visual Studio 的模板创建一个 UWP 程序,我们会在项目中发现大量的项目文件.配置.应用启动流程代码和界面代码.然而这些文件在 UWP 程序中到底是如何工作起来的? 我从零开始 ...

  6. 使用 Task.Wait()?立刻死锁(deadlock)

    最近读到一篇异步转同步的文章,发现其中没有考虑到异步转同步过程中发生的死锁问题,所以特地在本文说说异步转同步过程中的死锁问题. 文章作者 林德熙 已经修复了描述: - win10 uwp 异步转同步 ...

  7. linux 下的定时任务的设置

    为当前用户创建cron服务 1.  键入 crontab  -e 编辑crontab服务文件 例如 文件内容如下: */2 * * * * /bin/sh /home/admin/jiaoben/bu ...

  8. [Luogu4630][APIO2018]Duathlon 铁人两项

    luogu 题目描述 比特镇的路网由 \(m\) 条双向道路连接的 \(n\) 个交叉路口组成. 最近,比特镇获得了一场铁人两项锦标赛的主办权.这场比赛共有两段赛程:选手先完成一段长跑赛程,然后骑自行 ...

  9. 【转】Linux 静态库与共享库的使用

    原文网址:http://blog.csdn.net/heyabo/article/details/11688517 申明: 正如题如示,本篇讲的是Linux下是静态库与共享库,而Window下的动态链 ...

  10. Zookeeper的shell操作

    一.客户端连接服务器 zkCli.sh start 二.命令操作 进入到客户端操作行,键入help 查看zookeeper命令列表 常用命令 1) 查看节点列表:ls 路径 2) 创建节点:creat ...