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. Linux下安装nginx和php

    1. 安装nginx,传送门:http://www.cnblogs.com/emberd/p/4536238.html2. 下载php源码压缩包:php-5.6.1.tar.gz3. 解压后进入目录, ...

  2. java小知识点 2015/10/6

    java中length,length(),size()区别: 1 java中的length属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度 2 java中的length()方法是针对字 ...

  3. HDU - 5942 :Just a Math Problem (莫比乌斯)

    题意:略. 思路:问题转化为1到N,他们的满足mu[d]!=0的因子d个数.  即1到N的因子的莫比乌斯系数平方和. (经验:累加符号是累加的个数,我们把常数提到前面,然后用杜教筛累加个数即可. ht ...

  4. RF设置全局变量

    一般情况下,我们的测试用例会有很多公用数据,比如在测试购票功能的时候,可能是一直使用同一个列车号,这时候我们就没有必要在每一个Case中都去新建一个列车班次,而是设置一个全局变量: 1.Set Var ...

  5. #ifndef/#define/#endif以及#if defined/#else/#endif使用详解

    1.#ifndef_WINDOWS_PLAYM4_H_      #define _WINDOWS_PLAYM4_H_ #endif 问题:想必很多人都看过"头文件中的 #ifndef/#d ...

  6. 记录一些WPF常用样式方便以后复用(转)

    TextBox文本框 <Style x:Key="TextBoxStyle1" BasedOn="{x:Null}" TargetType="{ ...

  7. Cassandra spring data 试用

    1. maven  依赖 <dependency> <groupId>org.springframework.data</groupId> <artifact ...

  8. MyEclipse项目突然报错JavanotFindClassException

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/UP19910522/article/details/25985277 好好的项目.从SVN检出到本地 ...

  9. Python 函数 -getattr()

    getattr(object, name[, default]) getatt() 函数用于返回一个对象属性值.object 对象.name 字符串,对象属性.object 默认返回值,如果不提供该参 ...

  10. Linux下定时执行任务(crontab命令)

    1.循环执行的计划任务 linux下面有atd和crond两种计划任务,其中,atd服务使用的at命令只能执行一次,而crond服务使用的crontab定义的命令,是循环作用的,所以crond才符合我 ...