JSP设计-第11章(1)

本文介绍了JavaServer Pages (JSP) 中自定义标签的基本概念、实现方式及使用方法。涵盖了自定义标签的两种实现途径——Java类和标记文件,以及如何通过body-content属性来指定标签体的内容处理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自定义tag:

The year property of a java.util.Date (represented by the getYear( ) method) contains the current year minus 1900, so here I add 1900 to get the real year 

body-content. This attribute defines how the custom action element's body should be handled, and that it must have one of these values: empty, scriptless (the default), or tagdependent

body-content元素 :

没有正文的标签必须用body-content元素声明它们的正文内容是空的(tld文件中):

<body-content>empty</body-content>

从JSP规范2.0以来,定制标记库动作可以采用两种方法实现:一种是作为Java类,另一种是作为包含有JSP元素的常规文本文件。

创建和使用标记文件
标记文件(tag file)是包含有JSP元素的文本文件,这些JSP元素实现了定制动作的功能。必须使用.tag文件扩展名,以使Web容器能识别此类文件。创建一个标记文件与创建JSP页面并无不同。标记文件一旦创建和安装,类似于用Java实现的定制动作,也能用同样的方式使用。

例题:

copyright.jsp

 

<%@ page contentType="text/html" %>
<%@ taglib prefix="my" tagdir="/WEB-INF/tags/mytags" %>

<html>
  <body bgcolor="white">
    Any old page content ...
    <p>
    <my:copyright/>
  </body>
</html>

prefix名字可以随便定义。JSp默认,行为名为文件名(copyright) .如果用打包成jar的方式,那么tagdir要改成uri,并且写个tld文件定义说明。这会在之后的笔记中记录。

如果取值为empty,那么试图使用定制动作元素的体将会导致一个语法错误。scriptless值表示体中可以包含任何JSP元素,脚本元素除外。tagdependent值表示动作元素体则处理为纯模板文本。

copyright.tag

&copy;为版权标志
<%@ tag body-content="empty" %>

<jsp:useBean id="now" scope="application" class="java.util.Date" />
Copyright &copy; ${now.year} My Company


简单标签的handler必须实现Tag接口的doStartTag和doEndTag方法。在遇到开始标签时调用doStartTag方法。因为简单标签没有正文,所以这个方法返回SKIP_BODY。在遇到结束标签时调用doEndTag方法。如果要对页面的其他部分进行判断,则doEndTag方法需要返回EVAL_PAGE,否则,它就返回SKIP_PAGE。

简单标签:

<tt:simple />

由下列标签handler实现:

public SimpleTag extends TagSupport {
  public int doStartTag() throws JspException {
    try {       pageContext.getOut().print("Hello.");
    } catch (Exception ex) {
      throw new JspTagException("SimpleTag: " +
        ex.getMessage());     }
    return SKIP_BODY;   }
  public int doEndTag() {
    return EVAL_PAGE;
  }
}

可以定义两种类型的标签:
javax.servlet.jsp.tagext.Tag
javax.servlet.jsp.tagext.BodyTag
对 正文 进行操作 —— 即对在开始和结束标签之间的内容进行操作的 —— 标签必须实现 BodyTag 接口。

TLD必须以指定XML的版本和文档类型定义(DTD)的XML文档序言(prolog)开始。

taglib的子元素:

16-2 taglib子子元素 

元素

说明

tlib-version

标签库的版本

jsp-version

这个标签库要求的JSP规范版本

short-name

JSP页面编写工具可以用来创建助记名的可选名字

uri

唯一标识该标签库的的URI

display-name

将由工具显示的可选名

small-icon

将由工具使用的可选小图标

large-icon

可被工具使用的可选大图标

description

可选的标签特定信息

listener

listener元素

tag

tag元素

<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">

Tomcat支持版本 1.1和1.2的DTD。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值