首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 认证考试-> Cisco认证
JSP页面中的自定义标签-JSP教程,Jsp/Servlet
作者:网友供稿 点击:1945
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 
jsp页面中的自定义标签



jsp页面中的自定义标签
stephanie bodoff
用于调用javaean组件中的操作和执行请求分派的标准jsp标签简化了jsp页面的开发和维护。jsp技术还提供了在自定义标签中封装其他动态功能的机制,这种自定标签是jsp语言的扩展。自定义标签通常是以标签库的形式出现的,它定义了一组相关的自定义标签,并包含实现这些标签的对象。

可以由自定义标签执行的任务包括对隐式对象的操作、处理表单、访问数据库和其他企业级服务,如电子邮件和目录、以及执行流程控制。jsp标签库是由精通java编程语言和对访问数据库和其他服务非常熟悉的开发人员创建的,使用这些标签,web应用程序开发人员就可以把注意力放到内容的呈现上,而不用费心考虑如何访问企业级服务。就像鼓励将库开发人员和库使用人员的工作分开一样,自定义标签通过封装反复执行的任务使它们可以在多个应用程序中重复使用,从而提高了生产率。

jsp技术社区给予标签库非常高的重视。有关标签库的信息和一些免费的库的地址,参见

http://java.sun.com/products/jsp/taglibraries.html

什么是自定义标签?
自定义标签是用户定义的jsp语言元素。当包含自定义标签的jsp页面转换为servlet时,这个标签就转换为一个名为tag handler的对象上的操作。之后当jsp页面的servlet执行时,web容器就调用这些操作。

自定义标签有丰富的功能。它们可以

· 通过从调用页面传递的属性进行定制。

· 访问jsp页面可以使用的所有对象。

· 修改由调用页面生成的响应。

· 彼此通信。可以创建并初始化javabean组件、在一个标签中创建引用该bean的变量、再在另一个标签中使用这个bean。

· 彼此嵌套,可以在jsp页面中实现复杂的交互交互。

jsp页面示例
本章描述使用和定义标签所涉及的任务。本章用改写了的、在jsp页面示例中讨论的jsp版本的duke’s bookstore应用程序的部分演示这些任务,所做的改写利用了两个标签库的优点:struts和tutorial-template。本章的第三节示例详细描述了两个标签:strutst中的iterate和tutorial-template标签库中的一组标签。

struts标签库提供了构建实现模型-视图-控制设计模式的国际化web应用程序的框架。struts包括完整的一组自定义工具标签,用于处理:

· html 表单

· 模板

· javabeans组件

· 逻辑处理

dukes bookstore应用程序使用struts bean和logic子库中的标签。

tutorial-template标签库定义了一组用于创建应用程序模板的标签。模板是带有占位符的jsp页面,这些占位符需要在每一屏幕中改变。每一个占位符称为模板的参数。例如,一个简单的模板可能包括在生成的屏幕上方的title参数,和一个jsp页面作为屏幕的定制内容的body参数。模板是用一组嵌入的标签创建的——definition、screen和parameter——它们用于构建dukes bookstore的屏幕定义表,并用insert标签将参数从表中插入屏幕。

图16-1显示了通过dukes bookstore web组件的请求流程:

· template.jsp, template.jsp确定每一屏幕的结构。它使用insert标签用子组件组成屏幕。

· screendefinitions.jsp,它定义了每一屏幕使用的子组件。所有屏幕都有相同的横幅,但是标题和正文不同(由表15-1中的jsp页面列所指定)。

· dispatcher,这是一个servlet,它处理请求并转发给template.jsp。



图16-1 通过dukes bookstore组件的请求流程

dukes bookstore应用程序的源代码位于在解压缩教程包(见运行示例)时生成的docs/tutorial/examples/web/bookstore3目录中。要编译、部署并运行这个例子,你需要:

1. 从以下地址下载struts version 1.0.2

http://jakarta.apache.org/builds/jakarta-struts/release/v1.0.2/

2. 解压缩struts并将struts-bean.tld、struts-logic.tld和struts.jar从jakarta-struts-1.0/lib拷贝到<jwsdp_home>/docs/tutorial/examples/web/bookstore3。

3. 在终端窗口,进入<jwsdp_home>/docs/tutorial/examples/bookstore3.

4. 运行ant build。build目标会进行所有必要的编译并将文件拷贝到<jwsdp_home>/docs/tutorial/examples/web/bookstore3/build目标。

5. 确保已经启动了tomcat。

6. 运行ant install。install目标通知tomcat 已经有了内容。

7. 如果还没有做的话,就启动pointbas数据库服务器并加入数据(见从web应用程序中访问数据库)。

8. 打开书店url http://localhost:8080/bookstore3/enter。

有关诊断常见问题的帮助见常见问题及其解决方案和故障排除。

使用标签
本节描述jsp页面如何使用标签,并介绍不同类型的标签。

要使用标签,页面编写者必须做以下两件事:

· 声明包含标签的标签库

· 让标签库实现对于web应用程序可用

声明标签库
通过在使用任何自定义标签之前,将taglib指令加入页面中声明jsp页面将使用在标签库中定义的标签:

<%@ taglib uri="/web-inf/tutorial-template.tld" prefix="tt" %>

uri属性表示唯一标识标签库描述符(tld)的uri,在标签库描述符中描述了uri。这个uri可以是直接或者非直接的。prefix属性定义了区分指定标签库所定义的标签与其他标签库提供的标签的前缀。

标签库描述符文件名必须有扩展名.tld。tld文件储存在war的web-inf目录中,或者在web-inf的子目录中。可以直接或者间接引用tld。

下面taglib指令直接引用一个tld文件名:

<%@ taglib uri="/web-inf/tutorial-template.tld" prefix="tt" %>

这个taglib指令使用一个短的逻辑名间接引用tld:

<%@ taglib uri="/tutorial-template" prefix="tt" %>

在web应用程序部署描述符中将逻辑名映射到一个绝对位置。要将逻辑名/tutorial-template映射为绝对位置/web-inf/tutorial-template.tld,在web.xml中添加元素taglib:

<taglib>
<taglib-uri>/tutorial-template</taglib-uri>
<taglib-location>
/web-inf/tutorial-template.tld
</taglib-location>
</taglib>

让标签库实现可用
可以以两种方式让标签库实现对web应用程序可用。实现了标签handler的类可以以非打包的形式储存在web应用程序的web-inf/classes子目录中。另一种方法是,如果以jar的形式发布库,就将它储存在web应用程序的web-inf/lib目录中。在多个应用程序中共享的标签库储存在java wsdp的<jwsdp_home>/common/lib目录中。

标签类型
jsp自定义标签是用xml语法编写的。它们有一个开始标签和结束标签,可能还有正文:

<tt:tag>
body
</tt:tag>

不带正文的自定义标签如下表示:

<tt:tag />

简单标签
一个简单标签没有正文,也没有属性:

<tt:simple />

带属性的标签
自定义标签可以带有属性。属性列在开始标签中,语法为attr="value"。像用参数定制方法的行为一样,属性值用于定制自定义标签的行为。在标签库描述符中指定标签属性的类型(见带属性的标签)。

可以用一个常量或者运行时表达式设置属性值。常量和运行时表达式与属性类型之间的转换过程遵循在设置javabean组件属性中描述的javabean组件属性规则。

struts logic:present标签的属性决定是否对标签的正文进行判断。在下面的例子中,一个属性指定需要一个名为的参数clear:

<logic:present parameter="clear">

dukes bookstore应用程序页面catalog.jsp使用了运行时表达式设置属性的值,它决定struts logic:iterate标签要枚举哪几本书。

<logic:iterate collection="<%=bookdb.getbooks()%>"
id="book" type="database.bookdetails">

带正文的标签
自定义标签可以包含自定义和核心标签、脚本元素、html文本和开始与结束标签之间的、依赖于标签的正文内容。

在下面的例子中,dukes bookstore应用程序页面showcart.jsp使用struts logic:present标签清除购物车,并且如果请求包含一个名为clear的参数就打印一个消息。

<logic:present parameter="clear">
<% cart.clear(); %>
<font color="#ff0000" size="+2"><strong>
you just cleared your shopping cart!
</strong><br>&nbsp;<br></font>
</logic:present>

选择用属性或者正文传递信息
正如最后两节中所展示的,可以将给定的数据作为标签的属性或者标签的正文传递。一般来说,任何简单字符串或者可以由对简单表达式判断而生成的数据最好作为属性传递。

定义脚本变量的标签
自定义标签可以定义可在页面中的脚本中使用的变量。下面的例子展示了如何定义并使用包含一个从jndi查询中返回的对象的脚本变量。这种对象的例子包括企业bean、事务、数据库、环境项等等:

<tt:lookupegin(); %> id="tx" type="usertransaction"
name="java:comp/usertransaction" />
<% tx.b

在dukes bookstore应用程序中,有几个页面使用了struts的面向bean的标签以定义脚本变量。例如,bookdetails.jsp使用了bean:parameter标签以创建脚本变量bookid并设置它并将它设置为请求参数bookid的值。jsp:setproperty语句还设置bookdb对象的bookid属性为请求参数bookid的值。bean:define标签提取书店数据库bookdetails属性bookdetails的值并将结果定义为脚本变量book:

<bean:parameter id="bookid" name="bookid" />
<jsp:setproperty name="bookdb" property="bookid"/>
<bean:define id="book" name="bookdb" property="bookdetails"
type="database.bookdetails"/>
<h2><jsp:getproperty name="book" property="title"></h2>

操作标签
自定义标签可以通过共享对象彼此合作。

在下面的例子中,tag1创建了一个名为obj1的对象,再由tag2返回这个对象。

<tt:tag1 attr1="obj1" value1="value" />
<tt:tag2 attr1="obj1" />

在下面的例子中,由一组嵌套标签中的外围标签创建的对象对于所有内部标签都是可用的。因为没有为对象命名,所以可以减少潜在的命名冲突。这个例子展示在jsp页面中一组协作的嵌入标签会是什么样子的。

<tt:outertag>
<tt:innertag />
</tt:outertag>

dukes bookstore页面template.jsp使用了一组协作标签定义应用程序的屏幕。在模板标签库中描述了这些标签。

定义标签
要定义标签,需要:

· 为该标签开发一个tag handler和helper类

· 在标签库描述符中声明这个标签

本节描述标签handler和tld的属性,并解释如何为在前面几节中介绍的标签开发tag handler和库描述符元素。

标签handler
标签handler是由web容器调用的一个对象,用于执行带有自定义标签的jsp页面时对这个标签进行判断。标签handler必须实现tag或者bodytag接口。接口可以用于接受现有java对象并使它成为标签handler。对于新创建的处理器,可以用tagsupport和bodytagsupport类作为基类。这些类和接口包含在javax.servlet.jsp.tagext包中。

jsp页面的servlet在对标签处理的不同阶段调用由tag和bodytag接口定义的标签handler。遇到自定义标签的开始标签时,jsp页面的servlet调用方法以初始化相应的handler,然后调用handler的dostarttag方法。遇到自定义标签的结束标签时,调用处理器的doendtag方法。在标签handler需要与标签的正文交互时调用其他方法,见带正文的标签。为了提供标签handler的实现,必须实现在处理标签的不同阶段调用的方法,在表16-1中汇总了这些方法。

表16-1标签handler方法

标签handler类型
方法

简单
dostarttag, doendtag, release

属性
dostarttag, doendtag, set/getattribute1...n, release

正文、判断且无交互
dostarttag, doendtag, release

正文、迭代判断
dostarttag, doafterbody, doendtag, release

正文、交互
dostarttag, doendtag, release, doinitbody, doafterbody, release


标签handler可以使用一个能让它得以与jsp页面通信的api。到api的入口点是页面上下文对象(javax.servlet.jsp.pagecontext),通过它标签handler可以获取jsp页面能够访问的所有其他隐式对象(请求、会话和应用程序)。

隐式对象可以有与其相关联的命名属性。可以用[set|get]attribute方法访问这种属性。

如果标签是嵌入的,标签handler还可以访问与外围标签关联的handler称为parent)。

一组相关的标签handler类(标签库)一般是打包的且作为jar文档部署。

标签库描述符
标签库描述符(tld)是一个描述标签库的xml文档。tld包含有关整个库以及库中包含的每一个标签的信息。web容器用tld验证标签,jsp页面开发工具也使用tld。

tld文件名必须有扩展名.tld。tld文件也储存在war文件的web-inf目录中或者在web-inf的子目录中。

tld必须以指定xml的版本和文档类型定义(dtd)的xml文档序言(prolog)开始。

<?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。不过,本章所讨论的是1.2版本,因为在开发的所有标签库中都应该使用最新的版本。模板库tldtutorial-template.tld符合版本1.2。struts库tld符合版本1.1的dtd,它的元素要少,且其中一些元素使用了稍微不同的名字。

tld的根是taglib元素。表16-2中列出了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元素



listener元素
标签库可以指定一些事件监听器类(见处理servlet生命周期事件)。这些监听器在tld中作为listener元素列出,web容器将初始化监听器类并以类似在war级定义的监听器的方式注册它们。与war级监听器不同,这里没有指定标签库监听器注册的顺序。listener元素的唯一子元素是listener-class元素,它必须包含监听类的完全限定名。

tag元素
库中的每一个标签都由给出其名字和其标签handler的类、在由标签创建的脚本变量上的信息以及标签属性上的信息描述。脚本变量信息可以在tld中直接给出,也可以通过tag extra info类给出(见定义脚本变量的标签)。每一个属性声明包含指明属性是否是必需的、其值是否可以由请求时表达式确定以及属性类型的内容(见属性元素)。

在tag元素中的tld中指定标签。在表16-3中出了tag的子元素:

表16-3 标签子元素

元素
说明

name
唯一标签名

tag-class
标签handler类的完全限定名

tei-class
javax.servlet.jsp.tagext.tagextrainfo的可选子类。见提供有关脚本变量的信息。

body-content
正文内容类型。见body-conten元素和 body-content元素。

display-name
由工具显示的可选名

small-icon
可以由工具使用的小图标

large-icon
可以由工具使用的大图标

description
可选的标签特定的信息

variable
可选的脚本变量信息。见提供有关脚本变量的信息。

attribute
标签属性信息。见attribute 元素。


下面几节描述开发在标签类型中介绍的每一种类型的标签所需要的方法和tld。

简单标签
标签handler
简单标签的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;
}
}

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

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


jsp页面中的自定义标签


文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·JSP页面中的自定义标签-JSP教程,Jsp/Servlet
·动态加载Asp.net分页控件-.NET教程,Asp.Net开发
·探究客户端浏览器分辨率的自适应问题(2)-.NET教程,评论及其它
·使用Eclipse开发Jsp-JSP教程,Jsp/Servlet
·正确优雅地解决用户退出——JSP及Struts解决方案-JSP教程,Jsp/Servlet
·关于C#中虚方法重载的说明-.NET教程,C#语言
·如何查看本机打开的端口是被哪个程序使用的-网管专栏,操作系统
·C#中来应用Hook-.NET教程,C#语言
·网页表单验证代码的改进-ASP教程,脚本编码
·最新版ccnp教材介绍
最新文章
·号称全球第一篇华人女站长的建站理财文章_站长心得
·衡量一个网站的价值的公平化的标准是什么?_站长心得
·谈谈网站设计的10个要点2_站长心得
·获取google pagerank值的研究_google推广
·强悍的网络编辑是怎样炼成的?_网络编辑
·点析网站发展三阶段3_站长心得
·个人网站真能转成商业网站,你能么?_站长心得
·百度搜索引擎使用指南_baidu推广
·加入自动功能windows vista磁盘整理全面解析_windows vista
·asp.net中多彩下拉框的实现_asp.net技巧
相关主题
  • jsp页面显示数据导出到excel表中_jsp技巧
  • JSP页面编码问题研究-JSP教程,Jsp/Servlet
  • Jsp页面连接MySQL数据库-JSP教程,Jsp/Servlet
  • JSP页面中连接IBM Cloudscape(derby)数据库-JSP教程,Jsp/Servlet
  • JSP页面中的自定义标签2-JSP教程,Jsp/Servlet
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭