标签在web 开发中经常用到像jsf、jstl、struts等等框架都有自己的标签庫,当然我们也可以根据实际需要开发自己 的标签。在上一个项目中我用到了自定义标签,在这里总结一下,也好巩固一下知识。
标签其实是一种xml元素,所以它的名称和属性对大小写敏感。我们对标签进行处理,其实就是对标签处理类的对象进行操作,(jsp------>jsp引擎------------->Servlet--------------------->对象)
标签的分类
————》带有主体和属性(都是可选的)
- 不带属性和主题的标签:<myTag:tagName/>
- 带属性不带主题的标签:<myTag:tagName name="userName" value="wangyalei"/>
- 带有主体和属性的标签:<myTag:tagName name="userName" value="wangalei">javaeye</myTag:tagName>
- SimpleTag:一种簡単类型类型标签
标签的处理过程
当jsp中使用标签时,有容器对其进行实例化,然后依次进行一下操作
- 通过setPageContext()方法来设置标签的页面上下文
- 使用setParent()方法设置标签的上一级标签,如果没有上一级,设置为null
- 设置标签的属性
- 通过doStartTag()方法,如果返回EVAL_BODY_INCLUDE,就计算标签的Body,如果返回SKIP_BODY,就不用计算标签的Body
- 调用doEndTag()方法,如果返回EVAL_PAGE时,容器将在标签的结束时候计算jsp的其他的部分,如果返回SKIP_PAGE容器将在标签结束时停止计算jsp页面的其他部分
- 调用release()方法释放资源
下面是个定义标签的小例子
/******************************************************************************
* wangyalei
* V00.00.00 2011/1/6
******************************************************************************/
package cn.javaeye.tag;
import java.text.SimpleDateFormat;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
public class DataTimetag extends TagSupport {
private static final long serialVersionUID = 1L;
String format = "yyyy-MM-dd hh:mm:ss";
/*
* (non-Javadoc)
*
* @see javax.servlet.jsp.tagext.TagSupport#doStartTag()
*/
@Override
public int doStartTag() throws JspException {
System.out.println("startTag........................");
return super.doStartTag();
}
public void setFormat(String str) {
if (str.equalsIgnoreCase("date")) {
format = "yyyy-MM-dd";
} else if (str.equalsIgnoreCase("time")) {
format = "hh:mm:ss";
}
}
/*
* (non-Javadoc)
*
* @see javax.servlet.jsp.tagext.TagSupport#doEndTag()
*/
@Override
public int doEndTag() throws JspException {
System.out.println("endTag..........................");
SimpleDateFormat sdf = new SimpleDateFormat(format);
String time = sdf.format(new java.util.Date());
try {
pageContext.getOut().print(
"<span style=\"color:red;\">" + time + "</span>");
} catch (Exception e) {
throw new JspException(e.toString());
}
return EVAL_PAGE;
}
/*
* (non-Javadoc)
*
* @see javax.servlet.jsp.tagext.TagSupport#release()
*/
@Override
public void release() {
System.out.println("release...........................");
super.release();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee web-jsptaglibrary_2_0.xsd">
<tlib-version>1.0</tlib-version>
<short-name>examples</short-name>
<uri>/demotag</uri>
<description>
a simple tag library for the examples
</description>
<tag>
<name>dateTime</name>
<tag-class>cn.javaeye.tag.DataTimetag</tag-class>
<attribute>
<name>format</name>
</attribute>
</tag>
</taglib>
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<jsp-config>
<taglib>
<taglib-uri>/mytag</taglib-uri>
<taglib-location>/WEB-INF/mytag.tld</taglib-location>
</taglib>
</jsp-config>
<welcome-file-list>
<welcome-file>dateTime.jsp</welcome-file>
</welcome-file-list>
</web-app>
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@ taglib prefix="t" uri="/mytag" %><!-- 声明标签库 -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>显示日期时间</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<h2>自定义标签显示日期时间</h2><br/>
<hr>
<br/>
<dl>
<dd>format属性datetime <t:dateTime format="datetime"/></dd>
<dd>format属性date <t:dateTime format="date"/></dd>
<dd>format属性time <t:dateTime format="time"/></dd>
</dl>
</body>
</html>
其实一个自定义标签就是有一般的javaBean,标签库描述、标签处理器、web.xml文件配置、标签庫声明等元素构成。javaBean、web.xml不多说了。
标签库的描述就是用一般的tld文件进行对标签进行描述,其中记录了标签的属性,信息和位置,服务器通过该文件来确定如何调用一个标签;
一个自定义标签的tld文件的内容我们可以参考java开源项目的tld文件这里我copy的是jstl自定标中c标签的头部
tld文件必须<taglib>来做它的根元素,<taglib>的子元素
元素名称
|
描述
|
tlib-version
|
Tag庫的版本
|
jsp-version
|
Tag庫需要的jsp的版本
|
short-name
|
tag的一个别名(可选)
|
uri
|
确定一个唯一的tag庫
|
description
|
对tag庫的描述(可选)
|
tag
|
定义标签的主要节点元素
|
Tag元素
元素名称 |
描述 |
name |
Tag标签对象的tag处理类 |
tag-class |
javax.servlet.jsp.tagext.TagExtraInfo的子类,用于表达式脚本的变量(可选) |
body-content |
Tag标签body类型 |
description |
tag标签的描述 |
variable |
提供脚本变量的信息(可选) |
attribute |
tag标签的属性名 |
- 大小: 9.8 KB
分享到:
相关推荐
自定义标签是Freemarker的一个重要特性,它允许开发者扩展模板语言的功能,以满足特定项目的需求。本篇文章将对Freemarker自定义标签进行深入的总结。 1. **自定义标签基础** 自定义标签在Freemarker中被称为`...
总结来说,MyBatis的自定义标签功能允许开发者扩展XML映射文件,以实现特定的SQL逻辑和业务需求。通过创建处理类、注册标签、编写XML标签并处理逻辑,我们可以轻松地在MyBatis中定制自己的SQL构建机制,从而提高项目...
总结起来,JSP自定义标签提供了一种强大的方式来封装复杂的功能,使代码更易于管理和复用。通过定义TLD,创建处理类,然后在JSP页面中使用,开发者可以构建出自己的标签库,从而提高开发效率和代码质量。在给定的...
总结起来,这个“一个用于分页的自定义标签”项目提供了在Java Web环境中高效、可重用的分页解决方案。通过自定义标签,开发者可以将复杂的分页逻辑封装起来,使JSP页面更加简洁,同时提高代码的可维护性和复用性。
总结,JSP 2.0的自定义标签和自定义标签函数是提高开发效率和代码质量的重要工具。它们允许开发者创建高度可重用的组件,使得JSP页面的编写更加模块化和面向对象。通过学习和实践这些特性,开发者可以更好地驾驭JSP...
总结,通过自定义标签,我们可以构建出强大的JSP组件,提高代码复用性和可维护性。理解并掌握自定义标签的原理和实践,对于提升JSP应用的开发效率和质量具有重要意义。在分页和下拉框绑定值的场景中,自定义标签的...
在Java服务器页面(JSP)开发中,自定义标签是一种扩展JSP功能的强大方式,它允许我们封装复杂的逻辑或重复使用的代码片段,提高代码的可读性和可维护性。本篇将深入探讨“JSP自定义标签之日期显示”,以及如何通过...
总结来说,自定义标签是Java Web开发中的重要技术,它提高了代码质量,增强了代码的可维护性,同时也提升了开发效率。通过理解和熟练运用自定义标签,开发者可以更好地设计和实现复杂的Web应用程序。在实际项目中,...
总结来说,JSTL自定义标签提供了一种高效且可重用的方法来扩展JSP的功能。通过编写处理类和定义TLD,我们可以创建符合特定需求的标签,使JSP页面更加简洁、易于维护。在实际应用中,自定义标签可以极大地提高代码的...
总结,JSP自定义标签是JSP技术的重要组成部分,它们提供了扩展JSP功能的能力,使开发者能够创建高度定制且易于维护的页面组件。通过理解自定义标签的工作原理,开发者可以更好地构建高效、可扩展的Web应用。
### 原创-制作一个带参数的自定义标签 #### 深入解析与实践指南 在Web开发中,自定义标签库是提升代码复用性和可维护性的重要手段,尤其是在JavaServer Pages (JSP)环境中。本文将基于一篇技术笔记——《自定义...
总结,创建JSP自定义标签能够帮助开发者将复杂的逻辑封装起来,使得JSP页面更加清晰,同时提高了代码的重用性和可维护性。通过继承`TagSupport`或`BodyTagSupport`,并定义相应的属性和生命周期方法,我们可以轻松地...
总结,Java中的自定义标签是JSP技术的重要组成部分,通过定义TLD、编写处理类和在JSP页面中使用,可以实现高度定制化的功能,为Java Web应用程序开发带来灵活性和可扩展性。熟悉和掌握自定义标签的使用,对于提升...
总结来说,通过学习和实践JSP自定义标签,我们可以构建高效、灵活的Web应用程序,比如这里的分页系统,它不仅简化了页面的开发,还增强了系统的扩展性和可维护性。在实际项目中,结合良好的设计原则和最佳实践,...
总结,Struts2的自定义标签实例涉及到以下几个关键步骤:创建标签实现类、定义标签描述符、在JSP中使用标签以及处理标签逻辑。通过这种方式,我们可以构建强大的视图层组件,使代码更易于理解和维护,同时提升应用的...
### servlet与自定义标签知识点详解 #### 一、Servlet概述 ...自定义标签库则是提高Web应用开发效率的有效手段之一,它通过封装复杂逻辑简化了前端页面的设计。掌握这两种技术,对于深入理解Web开发有着重要意义。
在phpCMS系统中,自定义标签是一种非常实用的功能,它允许开发者根据自身需求扩展系统功能,为网站开发提供更多灵活性。通过自定义标签,可以在模板文件中方便地调用复杂的逻辑处理结果,而无需直接修改核心代码。...
总结来说,自定义标签和函数是Java Web开发中增强JSP功能的重要工具。通过自定义标签,我们可以创建封装复杂逻辑的可重用组件;自定义函数则允许我们在EL表达式中方便地执行特定操作。了解和掌握这些技术,能极大地...
1. **创建TLD文件**:首先,你需要创建一个.TLD文件,其中包含自定义标签的元数据,如标签名称、属性、事件处理等。 2. **编写标签处理类**:根据TLD文件中的定义,编写对应的Java类,实现`javax.servlet.jsp.tagext...