- 浏览: 830610 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (363)
- 2010年3月 (3)
- 2010年4月 (3)
- Java (116)
- ExtJs (22)
- EJB3.0 (11)
- JQuery (28)
- SqlServer (5)
- Oracle (17)
- hibernate (21)
- struts2 (14)
- php (10)
- JavaScript (11)
- jbpm (6)
- spring (24)
- lucene (2)
- ibatis (7)
- C# (8)
- mysql (11)
- json (3)
- webservice (3)
- 设计模式 (1)
- jdbc (1)
- servlet (2)
- ice (6)
- 日常软件问题 (2)
- 生活 (2)
- iphone (1)
- rest (3)
- ruby (2)
- linux (13)
- quartz (1)
- poi (1)
- redis (13)
- memcached (4)
- nosql (2)
- tomcat调优 (1)
- 项目管理 (0)
最新评论
-
天使建站:
jquery里和数组相关的操作 附带具体的实例 ...
jquery对象数组 -
Cy0941:
$('#formId').form('submit',...) ...
easyui的form表单提交处理 -
shmily2038:
swifth 写道楼主,,你的命令写错啦,,[root@ser ...
centos直接yum安装nginx -
swifth:
楼主,,你的命令写错啦,,[root@server ~]# y ...
centos直接yum安装nginx -
随遇而安DXX:
...
REST
本文将通过自定义标签显示日期为例,简单谈谈JSP自定义标签实现过程。包括没有正文的JSP自定义标签实现、没有正文的但带有属性的JSP自定义标签标签实现等等内容。
(一) 没有正文的JSP自定义标签实现
(1):定义JSP自定义标签处理类
- import java.io.IOException;
- import java.util.Date;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.jsp.JspException;
- import javax.servlet.jsp.JspWriter;
- import javax.servlet.jsp.tagext.Tag;
- import javax.servlet.jsp.tagext.TagSupport;
- //无正文标签类继承的是TagSupport类 实现的接口是Tag。 如果有正文的标签类继承的是BodyTagSupport类 实现的接口是BodyTag
- public class DateTagNoBody extends TagSupport {
- @Override
- public int doStartTag() throws JspException {
- HttpServletRequest request;
- // 是TagSupport类中定义的一个属性,它是javax.servlet.jsp.PageContext的对象
- request = (HttpServletRequest) pageContext.getRequest();
- java.text.SimpleDateFormat formater = new java.text.SimpleDateFormat("yyyy-MM-dd");
- String date = formater.format(new Date());
- JspWriter out = pageContext.getOut();
- try {
- out.print(date);
- } catch (IOException e) {
- e.printStackTrace();
- }
- // doStartTag() 方法返回 SKIP_BODY 。当然其原因是我们的简单日期标记没有正文。
- return Tag.SKIP_BODY;
- }
- }
(2) 定义tld文件
- <?xml version="1.0" encoding="UTF-8"?>
- <taglib>
- <tlibversion>1.0</tlibversion>
- <jspversion>1.1</jspversion>
- <tag>
- <name>displayDate</name>
- <tagclass>cn.com.chenlly.tag.DateTagNoBody</tagclass>
- <bodycontent>empty</bodycontent>
- </tag>
- </taglib>
(3) JSP页面动态引用
- <%@ page language="java" pageEncoding="UTF-8"%>
- <%@ taglib uri="/WEB-INF/datetag.tld" prefix="c"%>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- </head>
- <body>
- <c:displayDate/>
- </body>
- </html>
注意:动态引用和静态引用的区别。
为了进行静态引用,首先必须将下面的项加入到web.xml 文件中:
- <?xml version="1.0" encoding="ISO-8859-1" ?>
- <Web-app>
- <taglib>
- <taglib-uri>myTags</taglib-uri>
- <taglib-location>/WEB-INF/lib/DateTagLib.tld</taglib-location>
- </taglib>
- </Web-app>
然后,将JSP 声明加入到所有需要使用自定义标记库的页面中:
- <%@ taglib uri="myTags" prefix="c" %>
指定的uri 属性与在web.xml 文件中指定的taglib-uri 值相匹配。
在进行标记库的静态引用时,JSP 声明必须查询 web.xml 文件以执行库查询。这意味着如果移动或者重命名了库,或者希望在 web.xml 文件中加入更多的库,就必须停止服务器、更新 web.xml 文件、然后重新启动服务器。动态方法让JSP页直接指向 TLD 位置,因而是在解释JSP页面时进行处理。
(二) 没有正文的但带有属性的JSP自定义标签标签实现
(1):定义JSP自定义标签处理类
- import java.io.IOException;
- import java.util.Date;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.jsp.JspException;
- import javax.servlet.jsp.JspWriter;
- import javax.servlet.jsp.tagext.Tag;
- import javax.servlet.jsp.tagext.TagSupport;
- //无正文标签类继承的是TagSupport类 实现的接口是Tag。 如果有正文的标签类继承的是BodyTagSupport类 实现的接口是BodyTag
- public class DateTagNoBody extends TagSupport {
- private String pattern;
- @Override
- public int doStartTag() throws JspException {
- HttpServletRequest request;
- // 是TagSupport类中定义的一个属性,它是javax.servlet.jsp.PageContext的对象
- request = (HttpServletRequest) pageContext.getRequest();
- java.text.SimpleDateFormat formater = new java.text.SimpleDateFormat(pattern);
- String date = formater.format(new Date());
- JspWriter out = pageContext.getOut();
- try {
- out.print(date);
- } catch (IOException e) {
- e.printStackTrace();
- }
- // doStartTag() 方法返回 SKIP_BODY 。当然其原因是我们的简单日期标记没有正文。
- return Tag.SKIP_BODY;
- }
- //必须实现setXX()方法
- public void setPattern(String pattern){
- this.pattern = pattern;
- }
- }
(2) 定义tld文件
- <?xml version="1.0" encoding="UTF-8"?>
- <taglib>
- <tlibversion>1.0</tlibversion>
- <jspversion>1.1</jspversion>
- <tag>
- <name>displayDate</name>
- <tagclass>cn.com.chenlly.tag.DateTagNoBody</tagclass>
- <bodycontent>empty</bodycontent>
- <!-- 定义属性 -->
- <attribute>
- <name>pattern</name> <!-- 属性名字 -->
- <type>String</type> <!-- 属性类型 -->
- <requried>false</requried> <!-- 是否必须 -->
- <rtexprvale>false</rtexprvale> <!-- 表示是否可以使用JSP表达式 -->
- </attribute>
- </tag>
- </taglib>
(3)JSP页面动态引用
- <%@ page language="java" pageEncoding="UTF-8"%>
- <%@ taglib uri="/WEB-INF/datetag.tld" prefix="c"%>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- </head>
- <body>
- <c:displayDate pattern='yyyy-MM-dd'/>
- </br>
- <c:displayDate pattern='MM/dd HH:mm:ss'/>
- </body>
- </html>
(三) 有正文的且带有属性的JSP自定义标签实现
(1):定义JSP自定义标签处理类
- import java.io.IOException;
- import java.util.Date;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.jsp.JspException;
- import javax.servlet.jsp.JspWriter;
- import javax.servlet.jsp.tagext.BodyContent;
- import javax.servlet.jsp.tagext.BodyTagSupport;
- public class BodyTag extends BodyTagSupport {
- private int count;
- private HttpServletRequest reqeust;
- private JspWriter out;
- public void init() {
- reqeust = (HttpServletRequest) pageContext.getRequest();
- out = pageContext.getOut();
- }
- @Override
- public int doStartTag() throws JspException {
- init();
- return this.EVAL_BODY_INCLUDE;
- }
- //设置当前标签体
- @Override
- public void setBodyContent(BodyContent bodyContent) {
- this.bodyContent = bodyContent;
- System.out.println("setBodyContent...");
- }
- //需要初始化bodyContent
- @Override
- public void doInitBody() throws JspException {
- System.out.println("init.....");
- }
- @Override
- public int doAfterBody() throws JspException {
- if (count >= 1) {
- try {
- out.println(count);
- out.println("<Br>");
- } catch (IOException e) {
- e.printStackTrace();
- }
- count --;
- return this.EVAL_BODY_AGAIN;
- } else {
- return this.SKIP_BODY;
- }
- }
- @Override
- public int doEndTag() throws JspException {
- java.text.SimpleDateFormat formater = new java.text.SimpleDateFormat(
- "yyyy-MM-dd");
- String date = formater.format(new Date());
- try {
- out.print(date);
- } catch (IOException e) {
- e.printStackTrace();
- }
- return this.EVAL_PAGE;
- }
- // 必须实现setXX()方法
- public void setCount(int count) {
- this.count = count;
- }
- }
(2) 定义tld文件
- <?xml version="1.0" encoding="UTF-8"?>
- <taglib>
- <tlibversion>1.0</tlibversion>
- <jspversion>1.1</jspversion>
- <tag>
- <name>iterator</name>
- <tagclass>cn.com.chenlly.tag.BodyTag</tagclass>
- <bodycontent>jsp</bodycontent>
- <!-- 定义属性 -->
- <attribute>
- <name>count</name> <!-- 属性名字 -->
- <type>int</type> <!-- 属性类型 -->
- <requried>false</requried> <!-- 是否必须 -->
- <rtexprvale>false</rtexprvale> <!-- 表示是否可以使用JSP表达式 -->
- </attribute>
- </tag>
- </taglib>
(3) jsp 页面动态引用
- <%@ page language="java" pageEncoding="UTF-8"%>
- <%@ taglib uri="/WEB-INF/bodytag.tld" prefix="c"%>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- </head>
- <body>
- <c:iterator count="10">HelloWorld!</c:iterator>
- <%
- out.println("Bye Bye");
- %>
- </body>
- </html>
效果图:
执行顺序
doStartTag()->setBodyContent()->doInitBody()->doAfterTag()->doEndTag()
如果doStartTag()返回的是EVAL_BODY_INCLUDE执行doAfterTag()方法,
如果它返回SKIP_BODY就执行doEndTag()方法。
setBodyContent()方法用于设置标签体内容,如果在计算BodyContent时需要进行一些初始化工作,
则在doInitBody()方法中完成。标签体内容执行完后,会调用doAfterBody()方法
在doAfterTag()方法中返回EVAL_BODY_AGAIN来重复执行doAfterTag()方法
返回SKIP_BODY值则执行doEndTag()方法。
在doEndTag()方法中返回EVAL_PAGE值,则执行此标签的后的其它代码,
返回SKIP_PAGE则不执行此页面的其它代码。
发表评论
-
Jackson2.x通用工具类
2014-11-03 11:38 4894import java.io.IOException; i ... -
面试题
2013-02-27 09:04 1705从1加到100(考虑减少循环次数)使用数学公式 首先要知道 ... -
单例延迟实例化
2013-01-23 08:55 13231.如果出于性能的考虑而需要对实例域使用延迟初始化,就使用双 ... -
java中重载与重写的区别
2013-01-21 10:03 921首先我们来讲讲:重载(Overloading) ( ... -
自定义标签
2012-12-15 12:58 994package com.fsti.tag; import ... -
JAXB格式化beanToXml
2012-12-14 15:03 1250context = JAXBContext.n ... -
面向对象的特征有哪些方面?
2012-12-13 09:36 999计算机软件系统是现实 ... -
java nio缓冲器
2012-12-05 17:03 3596缓冲器仅仅是一个" 多功能 " 的数组。可 ... -
面向对象三大特性一句话概括
2012-12-04 15:58 1548封装可以隐藏实现细节,使得代码模块化; 继承可以扩 ... -
Java序列化高级认识
2012-12-04 09:13 1060将 Java 对象序列化为二进制文件的 Java 序列化技术是 ... -
面向接口编程——提升系统多态性和可扩展性
2012-12-03 14:10 1276接口的本质 接口,在表面上是由几个没有主体代码的方 ... -
面向对象之多态
2012-11-23 19:22 868多态性(polymorphisn)是允许你将父对象设置成为和一 ... -
我对"秒杀"在技术性上的一些看法
2012-11-22 11:31 1006秒杀,是指电子商务 ... -
项目编码
2012-11-16 13:59 1146看两个项目所用的编码是否一样 Java的乱码问题: ... -
SVN错误:Attempted to lock an already-locked dir
2012-11-07 09:08 1022出现这个问题后使用“ ... -
面向对象的三个基本特征
2012-11-04 08:31 1083面向对象的三个基本特征是:封装、继承、多态。 封装 封装最 ... -
预编译防sql注入
2012-11-03 20:23 1967prepareStatement会先初始化SQL,先把这个SQ ... -
Java类与对象的初始化
2012-10-19 09:33 891Java类与对象的初始化 面试的时候,经常会遇到这样的笔试题 ... -
commons bean
2012-10-19 09:15 884这是两个javabean对象 package com.bea ... -
java工具DateUtil
2012-10-12 14:42 1049//一年内的周一 public final class Da ...
相关推荐
在JavaServer Pages (JSP) 技术中,自定义标签是扩展JSP功能的关键手段,它允许开发者创建可重用的组件,提高...在给定的实例中,我们可以看到一个简单的自定义标签的实现和使用过程,涵盖了JSP自定义标签的基本流程。
本文将详细讲解如何利用JSP自定义标签库实现数据列表的显示,以及涉及到的相关技术。 首先,`UserListTag.java` 是自定义标签的核心类,它继承了`javax.servlet.jsp.tagext.TagSupport` 或 `javax.servlet.jsp....
在提供的链接中,`http://blog.csdn.net/zwhfyy/archive/2008/06/13/2543904.aspx`,作者详细讲解了如何创建和使用JSP自定义标签的过程,包括具体的代码示例和步骤说明。通过阅读这篇文章,你可以深入理解自定义标签...
在这个场景中,"使用JSP自定义标签实现EMP分页"是一个具体的应用实例,旨在提升代码的可读性和可维护性,对比传统的Servlet方法,自定义标签能让分页处理更加简洁。 首先,我们要了解JSP自定义标签的基本结构和工作...
它可能涵盖了从创建TLD文件,编写标签处理类,到在JSP页面上实际使用自定义标签的全过程。同时,这个文档可能会提供一些实际的例子,帮助读者理解自定义标签的工作原理。 而"test1.tld"文件则是对一个自定义标签库...
本资料"掌握jsp自定义标签chm版"全面讲解了这一核心概念,旨在帮助开发者深入理解和熟练应用JSP自定义标签。 1. **自定义标签概述** JSP自定义标签是扩展JSP功能的一种方式,允许开发者创建自己的标签库,类似于...
本文将深入讲解JSP自定义标签的相关概念、格式、处理过程以及创建和使用自定义标签库的基本步骤。 1. 基本概念: - **标签**:JSP标签是XML元素,用于简化JSP页面,使其更易读且支持多语言版本。标签名和属性区分...
### jsp自定义嵌套标签:定义与使用详解 在JavaServer Pages(JSP)技术中,自定义标签是扩展其功能的一种强大手段。而自定义嵌套标签,则是在此基础上进一步提升灵活性和重用性的机制。本文将深入探讨自定义嵌套...
下面将详细阐述JSP自定义标签的组成部分以及实现过程。 首先,**标签体**是自定义标签的主体部分,位于自定义标签的起始和结束标签之间,它可以包含静态内容或者其他的JSP元素,这些内容会在标签处理程序执行时被...
本教程将深入探讨JSP自定义标签的概念、创建过程及其实际应用。 ### JSP自定义标签概念 JSP自定义标签是对标准JSP标签(如`<jsp:include>`或`<c:forEach>`)的扩展,它们提供了更高级别的抽象,允许开发者定义自己...
本篇文章将深入探讨JSP自定义标签的开发与使用,以及如何通过实例`Demo1_JspTag`来理解这一过程。 首先,我们需要了解自定义标签的基本概念。自定义标签是JSP的一种扩展机制,它允许我们封装复杂的Java代码或业务...
首先,JSP自定义标签的核心在于自定义标签库(Tag Library),它是一组预定义的标签,由TLD(Tag Library Descriptor)文件来描述。TLD文件包含了标签的名称、属性、行为等元数据。开发者需要在TLD文件中定义标签的...
总的来说,这个项目结合了JSP自定义标签的创建、分页功能的实现以及当前位置的显示,涉及到了Web开发中的多个核心概念。通过这种方式,我们可以构建更加模块化、易于维护的JSP应用,提升开发效率。
本文将深入探讨JSP自定义标签的概念、实现过程以及实际应用案例。 **一、JSP自定义标签简介** JSP自定义标签是JSP技术的一部分,它允许开发者通过XML语法创建自己的标签库,这些标签可以封装复杂的Java代码,使JSP...
### JSP自定义标签详解 #### 一、引言 JSP(JavaServer Pages)是一种基于Java技术的服务器端脚本技术,它允许在HTML页面中嵌入Java代码,从而实现动态网页的功能。随着Web应用的复杂度逐渐提高,开发者需要更加...
本文将深入探讨三个核心概念:JSP自定义标签、Structs2框架以及JUnit测试,同时会提及Structs2中的自定义拦截器。 首先,JSP自定义标签是Java Web开发中的一种高级特性,它允许开发者创建自己的标签库,以提高代码...
本教程将详细介绍如何将JSP自定义标签打包成Jar文件,并将其导入到项目中。 首先,理解JSP自定义标签的概念是关键。自定义标签是JSP的一种扩展,它允许我们创建自己的标签,就像HTML标签一样,但它们执行的是Java...
### JSP自定义迭代标签详解 #### 一、引言 在JSP(JavaServer Pages)开发中,自定义标签可以极大地提高代码的复用性和可维护性。特别是在处理循环迭代逻辑时,自定义迭代标签能够使页面逻辑更加清晰、简洁。本文...
**JSP自定义标签开发手册** 在JavaServer Pages (JSP) 技术中,自定义标签是扩展JSP功能的重要手段,它允许开发者创建可重用、可封装的组件,提升代码的可读性和可维护性。本手册将深入探讨JSP自定义标签的开发流程...