手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>Java技术>列表

JSP中自定义标记符的使用

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

摘要
   在JSP中有一种机制,可以让你在JSP页面中插入与HTML类似的标记。本文介绍JSP定制标记的基本概念和构成,以及如何开发和应用JSP定制标记。

关键字
JSP,XML,TLD,标记符

什么是标记
使用HTML语言我们可以这样去编辑我们的网页:

<HTML>

    <HEAD>

<TITLE>

HELLO WORLD

</TITLE>

</HEAD>

<BODY>

HELLO WORLD

</BODY>

</HTML>

在这里我们把</HEAD>,<TITLE>,<BODY>称为标记。HTML 标记( HTML Markup)是HTML文档的控制语言,用于指定浏览器显示和打印文档的方式.它是用小于号"<"和大于号">"括起来的短语和符号,如 <Html>、</Body>等。许多HTMl标记以成对的方式出现,如<TITLE>< /TITLE>、<Body></Body> 等。在JSP中我们也可以定制自己的标记,以供JSP页面使用,如下例所示

<!—login.jsp-->

<%@ taglib uri="/tlds/taglib.tld" prefix="tagclass" %>

<html>

 <head>

<title>login</title>

 </head>

 <body>

   <tagclass:login width="200" height= "100" >

</tagclass:login>

 </body>

</html>

在上例中</tagclass:login>就是一个JSP定制标记符。widtht、height是这个标记的属性。<%@ taglib uri="/tlds/taglib.tld" prefix="tagclass" %>是一个标记库定义指令,在稍后我们将会讨论。在JSP中定制标记符,实质上就是以标记的形式封装了一个俱有独立功能的Java类。标记的使用减少了直接嵌入JSP页面的Java代码,方便了页面的布局,并且有利于代码的复用,提高了开发的效率。

JSP服务器解析标记的过程
那么当一个标记被嵌入JSP页面后,JSP服务器是如何对这个标记进行解析的呢?各对象的含义如下所示:

Client: 表示客户端。

JSP-Server:JSP服务器。

JSP-Page:JSP页面。

TLD:  标记库描述文件,定义标记和标记的各种属性和处理文件等。

TagClass 标记处理程序

当一个用户访问一个JSP页面时,这个请求被发送到JSP服务器,JSP服务器会根据这个请求去调用相应的页面,如果这个页面中有自定义的标记, JSP服务就会根据页面指令<%@ taglib>去访问TLD得到处理程序的相关信息,接着调用该处理程序的构造器方法,启动标记符处理程序,并读取标记符的属性和相应值。对每个没有设置属性的,调用相应的set方法。当标记符第一次使用时,它的任何属性都不会做过设置,因此对每个属性都调用set方法。属性设置完以后,JSP服务器调用处理程序的doStartTag(),然后再调用doEndTag()方法。最后JSP服务器会继续处理剩下的页面,在页面结尾调用release ()方法,清理占用的所有资源。

TLD文件
TLD(TLD:Tag Library Descriptor标记库描述符)文件,标准的XML格式的标记定义文件,被用来存放标记符的信息,下面就是一个典型的TLD文件。

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!—XML的版本及其字符集-->

<!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>

<!—此标记说明我们开始描述一个标记库-->

<tlibversion>1.0</tlibversion>

 <!—标记库的版本-->

<jspversion>1.1</jspversion>

 <!—所使用的JSP的版本-->

 <shortname>tagclass</shortname>

 <!—缺省的名称-->

<tag>

   <name>login</name>

    <!—标记的名称-->

<tagclass>

tagclass.login.login

<!—处理这个Tag的相应的类的名称-->

</tagclass>

   <info>

      <!—对本标记符的描述-->

   </info>

<attribute>

<!—开始定义标记的属性-->

    <name>height</name>

       <!—属性的名称-->

    <required>true</required>

       <!—表示这个属性是不是必须的-->

    <rtexprvalue>true</rtexprvalue>

<!—表示这个属性是否可以用JSP的程序段的结果输出-->

   </attribute>

<attribute>

    <name>width</name>

    <required>true</required>

    <rtexprvalue>true</rtexprvalue>

   </attribute>

</tag>

</taglib>

在这个TLD文件中定义了只有一个标记符的标记符库,这个名为login的标记符会调用一个Applet以验证用户的合法性。处理这个标记的类就是 tagclass.login.login。width、height是这个标记的两个属性。属性是在使用标记符时作为参数发送的值。我们可以在上面的示例中增加几个标记,也可以为每个标记添加几个属性。我们开发标记符库时不一定非要从头开始,自己编写一个全新TLD。我们可以使用某个集成的开发的环境,也可以修改上面的例子。

TagLib指令
那么当JSP服务器在解析一个标记符时,它是如何定义一个标记库的呢?这就是TagLib指令的主要责任。

Taglib 指令

定义一个标记库以及其自定义标记的前缀.

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!