Rhythmk 一步一步学 JAVA(7): jsp 自定义标签
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 自定义标签的更多相关文章
- java JSP自定义标签
来至: http://blog.csdn.net/jiangwei0910410003/article/details/23915373 http://blog.csdn.net/jiangwei09 ...
- Java jsp 自定义标签
1 自定义标签 1.1 引入 需求: 向浏览器输出当前客户的IP地址 (只能使用jsp标签) 1.2 第一个自定义标签开发步骤 1)编写一个普通的java类,继承SimpleTagSupport类,叫 ...
- Java基础83 JSP标签及jsp自定义标签(网页知识)
1.JSP标签 替代jsp脚本,用于jsp中执行java代码1.1.内置标签: <jsp:forward></jsp:forward> 相当于:request.getReu ...
- Java之 jstl 自定义标签的方法
1.写一个Java类 我的路径是写再tag包中的一个 HelloTag类 package tag; import java.io.IOException; import javax.servlet.j ...
- 从0开始学Java——从jsp到servlet转换的各种辅助元素介绍
1. 指示元素,<%@指示元素 [属性=值]* %> 其中指示元素包括page, include, 和tablib三个. 其中 属性=值 可以有多对. 其中page用来告知容器如何转译目 ...
- 学JAVA二十一天,自定义数组
今天就说一下自定义数组,至于要怎么用,我也不知道,反正逼格挺高的. 闲话不多说,开始: 首先,自定义数组首先要创建一个类,用来做自定义数组的类型. public class User{ private ...
- Java Web 自定义标签
1. 自定义标签 由于在JSP页面中直接嵌入Java代码会导致页面开起来非常混乱,不方便和美工等配合工作,为此,JSP提供了自定义标签技术,可以代替直接嵌入Java代码的方式提供动态逻辑,但自定义 ...
- Java精选笔记_自定义标签
自定义标签 自定义标签入门 什么是自定义标签 自定义标签可以有效地将HTML代码与Java代码分离,从而使不懂Java编程的HTML设计人员也可以编写出功能强大的JSP页面 JSP规范中定义了多个用于 ...
- JSP高级功能-java之JSP学习第三天(非原创)
文章大纲 一.JSP 标准标签库(JSTL)二.JSP 连接数据库三.JSP XML 数据处理四.JSP JavaBean五.JSP 自定义标签六.JSP 表达式语言七.JSP 异常处理八.JSP 调 ...
随机推荐
- Spring 学习笔记(一)
# IOC, DI # ApplicationContext.xml 描述类之间的依赖注入关系 # 初始化Bean工厂的两种方式 ## ClassPathXmlApplicationContext # ...
- MySQL 实用技巧
概述: MySQL有许多实用的技巧,利用这些技巧能提高工作的效率,减少一些不必要的麻烦.以下是几个我在MySQL日常维护从常用的技巧. 一.prompt 命令 功能:设置mysql客户端提示符 说明: ...
- test20190320
全连 \(n\leq 10^6\) ,保证答案在 \(long\ long\) 范围内. 比较浅显的 \(dp\ ?\) 记 \(f[i]\) 表示考虑前 \(i\) 个音符,其中第 \(i\) 个 ...
- BZOJ1131 POI2008 Sta 【树形DP】
BZOJ1131 POI2008 Sta Description 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 Input 给出一个数字N,代表有N个点.N<=10 ...
- (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
每次使用 Visual Studio 的模板创建一个 UWP 程序,我们会在项目中发现大量的项目文件.配置.应用启动流程代码和界面代码.然而这些文件在 UWP 程序中到底是如何工作起来的? 我从零开始 ...
- 使用 Task.Wait()?立刻死锁(deadlock)
最近读到一篇异步转同步的文章,发现其中没有考虑到异步转同步过程中发生的死锁问题,所以特地在本文说说异步转同步过程中的死锁问题. 文章作者 林德熙 已经修复了描述: - win10 uwp 异步转同步 ...
- linux 下的定时任务的设置
为当前用户创建cron服务 1. 键入 crontab -e 编辑crontab服务文件 例如 文件内容如下: */2 * * * * /bin/sh /home/admin/jiaoben/bu ...
- [Luogu4630][APIO2018]Duathlon 铁人两项
luogu 题目描述 比特镇的路网由 \(m\) 条双向道路连接的 \(n\) 个交叉路口组成. 最近,比特镇获得了一场铁人两项锦标赛的主办权.这场比赛共有两段赛程:选手先完成一段长跑赛程,然后骑自行 ...
- 【转】Linux 静态库与共享库的使用
原文网址:http://blog.csdn.net/heyabo/article/details/11688517 申明: 正如题如示,本篇讲的是Linux下是静态库与共享库,而Window下的动态链 ...
- Zookeeper的shell操作
一.客户端连接服务器 zkCli.sh start 二.命令操作 进入到客户端操作行,键入help 查看zookeeper命令列表 常用命令 1) 查看节点列表:ls 路径 2) 创建节点:creat ...