http://blog.csdn.net/dyyaries/article/details/9960987
JSP1.0中可以通过继承TagSupport或者BodyTagSupport来实现自定义的tag处理方法。
JSP2.0中也支持另外一种更为简单的自定tag的方法,那就是直接讲JSP代码保存成*.tag或者*.tagx的标签定义文件。tag和tagx文件不仅支持经典jsp代码,各种标签模版代码,还支持xml样式的jsp指令代码。
按照约定,tag和tagx文件需要放置在WEB-INF/tags目录下。
下面是一些简单的示例:
1.简单地显示时间time.tag
- <%@ tag import="java.util.*" import="java.text.*" %>
- <%
- DateFormat df = DateFormat.getDateInstance(DateFormat.LONG);
- Date d = new Date(System.currentTimeMillis());
- out.println(df.format(d));
- %>
- <%@ taglib prefix="util" tagdir="/WEB-INF/tags" %>
- <html>
- <head>
- </head>
- <body>
- Today is <util:time/>.
- </body>
- </html>
2.复制字符串多少遍repeater.tag
- <%@ attribute name="count" type="java.lang.Integer" required="true" %>
- <%@ attribute name="value" type="java.lang.String" required="true" %>
- <%!
- private String repeater(Integer count, String s) {
- int n = count.intValue();
- StringBuffer sb = new StringBuffer();
- for (int i = 0; i < n; i++) {
- sb.append(s);
- }
- return sb.toString();
- }
- %>
- <%
- out.println(repeater(count, value));
- %>
- <%@ taglib prefix="util" tagdir="/WEB-INF/tags" %>
- <html>
- <head>
- </head>
- <body>
- Let's get some sleep! <util:repeater count='${3 * 10}' value='zzz'/>
- </body>
- </html>
3.查找省份lookup.tag
- <%@ tag import="java.util.*" %>
- <%@ attribute name="cityName" required="true" %>
- <%@ variable name-given="province" %>
- <%@ variable name-given="population" variable-class="java.lang.Integer" %>
- <%
- if ("Toronto".equals(cityName)) {
- jspContext.setAttribute("province", "Ontario");
- jspContext.setAttribute("population", new Integer(2553400));
- }
- else if ("Montreal".equals(cityName)) {
- jspContext.setAttribute("province", "Quebec");
- jspContext.setAttribute("population", new Integer(2195800));
- }
- else {
- jspContext.setAttribute("province", "Unknown");
- jspContext.setAttribute("population", new Integer(-1));
- }
- %>
- <jsp:doBody/>
- <%@ taglib prefix="util" tagdir="/WEB-INF/tags" %>
- <html>
- <head>
- </head>
- <body>
- <% pageContext.setAttribute("cityName", "Montreal"); %>
- <util:lookup cityName="${cityName}">
- ${cityName}'s province is ${province}.
- ${cityName}'s population is approximately ${population / 1000000} million.
- </util:lookup>
- </body>
- </html>
上面的都是使用的经典jsp代码,下面将第3个示例使用其他代码实现:
*使用标签:
- <%@ tag import="java.util.*" %>
- <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- <%@ attribute name="cityName" required="true" %>
- <%@ variable name-given="province" %>
- <%@ variable name-given="population" %>
- <c:choose>
- <c:when test="cityName eq 'Toronto'>
- <c:set var="province" value="Ontario"/>
- <c:set var="population" value="2553400"/>
- </c:when>
- <c:when test="cityName eq 'Montreal'>
- <c:set var="province" value="Quebec"/>
- <c:set var="population" value="2195800"/>
- </c:when>
- <c:otherwise>
- <c:set var="province" value="Unknown"/>
- <c:set var="population" value="-1"/>
- </c:otherwise>
- </c:choose>
- %>
- <jsp:doBody/>
- <%@ taglib prefix="util" tagdir="/WEB-INF/tags" %>
- <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- <html>
- <head>
- </head>
- <body>
- <c:set var="cityName" value="Montreal"/>
- <util:lookup cityName="${cityName}">
- ${cityName}'s province is ${province}.
- ${cityName}'s population is approximately ${population / 1000000} million.
- </util:lookup>
- </body>
- </html>
*使用jsp指令,通常这种方式生成xml格式的文件
- <?xml version='1.0'?>
- <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page">
- <jsp:directive.tag import="java.util.*"/>
- <jsp:directive.taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"/>
- <jsp:directive.attribute name="cityName" required="true"/>
- <jsp:directive.variable name-given="province"/>
- <jsp:directive.variable name-given="population"/>
- <c:choose>
- <c:when test="cityName eq 'Toronto'>
- <c:set var="province" value="Ontario"/>
- <c:set var="population" value="2553400"/>
- </c:when>
- <c:when test="cityName eq 'Montreal'>
- <c:set var="province" value="Quebec"/>
- <c:set var="population" value="2195800"/>
- </c:when>
- <c:otherwise>
- <c:set var="province" value="Unknown"/>
- <c:set var="population" value="-1"/>
- </c:otherwise>
- </c:choose>
- </jsp:root>
- <?xml version='1.0'?>
- <jsp:root version='2.0'
- xmlns:jsp="http://java.sun.com/JSP/Page"
- xmlns:util="urn:jsptagdir:/WEB-INF/tags"
- xmlns:c="http://java.sun.com/jsp/jstl/core">
- <jsp:directive.page contentType="text/html"/>
- <html>
- <head>
- </head>
- <body>
- <c:set var="cityName" value="Montreal"/>
- <util:lookup cityName="${cityName}">
- ${cityName}'s province is ${province}.
- ${cityName}'s population is approximately ${population / 1000000} million.
- </util:lookup>
- </body>
- </html>
- </jsp:root>
附录:
标签文件中常用的指令:
tag | 类似JSP page指令,可以用于import常用的java类库等 |
include | 导入其他的标签定义文件 |
taglib | 使用其他标签,如jstl, spring tag, struts tag等等 |
attribute | 定义一个属性 |
variable | 定义一个jsp page中可见的变量,默认范围为NESTED,表示标签内有效。可选项有AT_BEGIN和AT_END |
这些指令的可选属性
body-content | 标签body的处理方式 ,可选项: 'empty', 'tagdependent' or 'scriptless' |
import | 导入使用的java类库 |
pageEncoding | 设置页面编码 |
isELIgnored | 是否忽略el表达式 |
dynamic-attributes | 用于存储自定义属性的map,所谓的自定义属性指:未隐式申明的变量 |
language | 使用的脚本语言,目前必须是java |
display-name | 标签名 |
small-icon | for tools |
large-icon | for tools |
description | 标签作用描述 |
example | informal description of how the tag is used |
<jsp:directive:attribute>的可选属性
name | 属性名 |
required | true or false |
rtexprvalue | true or false - 指定是否支持运行时表达式 |
type | 值类型 - 默认是java.lang.String |
fragment | true or false - 值先传递给容器(false), 直接传给标签处理方法(true) |
description | 属性描述 |
<jsp:directive:variable>的可选属性
name-given | 变量名(标签使用时的变量名) |
name-from-attribute | Specifies the name of an attribute, whose value is the name of the variable that will be available in the calling JSP page. Exactly one of name-given or name-from-attribute must be supplied. |
alias | A locally scoped variable which will store the variable's value. Used only with name-from-attribute. |
variable-class | 变量类.默认是java.lang.String. |
declare | Indicates whether the variable is declared in the calling JSP page or tag file. Default is true. Not entirely clear what this means! |
scope | 变量范围,可选项 AT_BEGIN(标签后jsp page内有效), AT_END(标签后jsp page内有效) and NESTED. NESTED(默认,标签内有效) |
description | 变量描述 |
相关推荐
"jsp 2.0自定义标签.doc"文件很可能包含了一个关于如何创建和使用自定义标签的详细教程。它可能涵盖了从创建TLD文件,编写标签处理类,到在JSP页面上实际使用自定义标签的全过程。同时,这个文档可能会提供一些实际...
- JSP 2.0引入了Facelets,它支持XML-based的视图层,可以更方便地创建自定义组件,包括自定义标签。 - Spring Web Flow、JSF等框架也提供了自定义标签的机制,进一步丰富了Web2.0开发中的自定义标签应用。 通过...
4. **自定义标签**:学习如何创建和使用自定义标签,扩展JSP的功能。 **四、EL和JSTL的使用** 1. **EL表达式**:了解EL语法,如变量引用、算术运算、比较和逻辑操作,以及如何通过EL访问JavaBean。 2. **JSTL核心...
本实例将深入探讨`Tag`的使用,以及如何通过JSP 2.0新特性来简化自定义标签的开发过程。 自定义标签的核心在于Tag Handler,这是处理特定标签行为的Java类。在JSP 2.0之前,创建自定义标签需要编写复杂的TLD(Tag ...
为了解决这个问题,JSP2.0提出了使用自定义标签(custom tags)来替代脚本元素的概念。自定义标签可以由任何了解XML和HTML的人员进行开发,使得页面的动态内容添加变得更加简单和直观。 ### 自定义标签的优势 使用...
8. **标签文件**:JSP 2.0允许开发者将自定义标签封装在单独的`.tag`文件中,提高了代码的重用性和模块化。 9. **自动注册Servlet和JSP**:不再需要在`web.xml`中手动配置每个Servlet或JSP,这简化了部署过程。 10...
3. **JSP标签和自定义标签**:学习如何创建和使用自定义标签,提高代码复用性。 4. **错误处理和调试**:学会设置和处理异常,以及如何在JSP中进行调试。 5. **MVC设计模式**:理解MVC模式并应用到JSP项目中,使代码...
此外,手册还深入探讨了JSP 2.0中的新特性,如表达式语言(EL)、JSP标准标签库(JSTL)以及JSP 2.0的自定义标签开发。这些新特性使得JSP页面开发更加简洁、高效和易于维护。 最后,手册通过一系列实战案例,展示了...
在JavaServer Pages (JSP) 技术中,自定义标签是实现页面逻辑和视图分离的一种重要方式,它允许开发者创建可重用的组件,提高代码的可维护性和复用性。本教程将深入探讨JSP自定义标签的实例与详细讲解。 一、JSP...
JSP 2.0支持自定义标签库,通过TLD(Tag Library Descriptor)文件定义。这使得开发者可以创建可重用的组件,增强代码的模块化和可维护性。例如,JSTL(JavaServer Pages Standard Tag Library)是预定义的一组标签...
- **自定义标签开发**:创建自定义标签涉及编写标签处理类、定义TLD文件,并在JSP页面中使用。 - **异常处理**:JSP 2.0支持使用`<error-page>`标签进行错误页面的指定,以及使用`<error-page>`和`<error-code>`...
3. **自定义标签库(Tag Libraries)**:JSP2.0支持自定义标签,允许开发者创建自己的标签库,使得代码更加模块化和可扩展。 4. **页面指令简化**:`<jsp:include>`和`<jsp:forward>`等指令变得更简洁,同时引入了`...
**JSP自定义标签详解** 在Java服务器页面(JSP)技术中,自定义标签是扩展JSP功能的重要手段,它允许开发者创建可重用的组件,这些组件的行为类似于HTML标签,但具备更强大的功能和灵活性。这篇博客将深入探讨JSP...
4. **自定义标签的增强**:通过提供`TagSupport`和`BodyTagSupport`等类,开发者可以更轻松地创建自定义标签,这些标签可以更好地集成到EL和JSTL中。 5. **分离的Java源文件**:JSP2.0允许将JSP页面编译为单独的...
- **自定义标签**:通过实现Tag接口或SimpleTag接口,可以创建可重用的自定义标签库。 3. **EL表达式语言** - EL表达式的语法:${expression},用于输出Java对象的值。 - EL的变量解析:访问作用域中的对象,如...
- **指令(Directives)**: JSP 2.0中包含`page`、`include`和`taglib`三种指令,用于设置页面属性、导入其他文件和定义自定义标签库。 - **脚本元素(Scripting Elements)**: 包括`!%>`(声明)、`<%= %>`...
- `taglib`指令:引入自定义标签库。 5. **JSP动作** - `jsp:include`:动态地将一个页面或资源插入到当前页面。 - `jsp:forward`:将请求转发到另一个页面。 - `jsp:useBean`:创建、查找和初始化JavaBean对象...
在Java服务器页面(JSP)开发中,自定义标签是一种扩展JSP功能的强大方式,它允许我们封装复杂的逻辑或重复使用的代码片段,提高代码的可读性和可维护性。本篇将深入探讨“JSP自定义标签之日期显示”,以及如何通过...
在Java服务器页面(JSP)开发中,自定义标签(Custom Tags)是一种强大的特性,它允许开发者创建可重用的组件,以提高代码的可维护性和可读性。本篇文章将深入探讨JSP自定义标签的开发与使用,以及如何通过实例`Demo...