Board logo

标题: 用五个容易的步骤实现 JSP 自定义标记(2) [打印本页]

作者: look_w    时间: 2018-7-15 09:10     标题: 用五个容易的步骤实现 JSP 自定义标记(2)

第 2 步. 创建 TLD下一步是定义包含自定义标记与处理它的 Java 类(或多个类)之间的映射的库。这个库是在一个名为标记库描述符(TLD)的 XML 文档中定义的。我们将从                 DateTag 例子                 DateTagLib.tld中调用这个 TLD。注意“.tld”是这种文件的标准扩展名。            
清单 2. DateTagLib.tld 文件
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="ISO-8859-1" ?>
<taglib>
   <tlibversion>1.0</tlibversion>
   <info>A simple tag library</info>
  <tag>
    <name>displayDate</name>
    <tagclass>myTags.DateTag</tagclass>
    <bodycontent>empty</bodycontent>
    <info>Display Date</info>
  </tag>         
</taglib>




DateTagLib.tld 是一个出色的、最小的标记库描述符文件。所有关键信息都包含在                 Tag 标记中,在这里映射了标记名和处理程序类,我们声明了标记对于正文内容的敏感性。对于更复杂的情况,我们可以使用其他的 XML 标记以提供有关库和标记的更多信息。在一个库中定义多个标记也很常见。            
第 3 步. 使 TLD 和处理程序类可访问第 3 步是使这个类或者这些类和 TLD 可以被 Web 应用程序访问。有两种方法:可以将类和 TLD 打包到一个 JAR 文件中,再将这个JAR 文件储存在 Web 应用程序的 lib 目录中,也可以将类文件分散地放到 classes 子目录中并将 TLD 文件放到 Web 应用程序的WEB-INF 目录下面的某一位置。
在这个例子中,我们将使用第二种方法,将 TLD 文件和类分散地放到 Web 应用程序目录结构中。您可以回忆起在第 1 步中我们已经将标记处理程序类放到了classes 目录中,所以我们实际上只需储存 TLD 文件。TLD 文件被储存在 WEB-INF 目录或者子目录中,如果是部署 Java 文件,则储存在JAR 的 META-INF/ 目录或者子目录。在这里,我们没有使用 JAR 文件,所以我们只将 TLD 储存到 Web 应用程序的 WEB-INF/lib目录中。
第 4 步. 引用这个库这时,我们已经编译了标记处理程序类、创建了 TLD 文件以定义处理程序类和标记之间的映射、并保证类和标记在应用程序中都是可访问的。下一步是建立JSP 页面与标记库之间的引用。有两种方法声明 JSP 页面与其库之间的引用。可以通过 Web 应用程序描述符(web.xml)声明一个静态引用,也可以直接在页面中声明一个动态引用。我们将试用这两种方法。
为了进行静态引用,首先必须将下面的项加入到 web.xml 文件中:
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="ISO-8859-1" ?>
<Web-app>
   
   <!-- Define Servlets, Servlet Mappings, etc. -->
            
   <taglib>
      <taglib-uri>myTags</taglib-uri>
      <taglib-location>/WEB-INF/lib/DateTagLib.tld</taglib-location>
   </taglib>
                        
</Web-app>




然后,将 JSP 声明加入到所有需要使用自定义标记库的页面中:
1
<%@ taglib uri="myTags" prefix="abc" %>




注意指定的                 uri 属性与在 web.xml 文件中指定的                 taglib-uri 值相匹配。            
为了进行动态引用,只需在所有需要使用这个库的页面中加入一个 JSP 声明即可:
1
<%@ taglib uri="/WEB-INF/lib/DateTagLib.tld" prefix="abc" %>




静态引用与动态引用的比较在进行标记库的静态引用时,JSP 声明必须查询 web.xml 文件以执行库查询。这意味着如果移动或者重命名了库,或者希望在 web.xml文件中加入更多的库,就必须停止服务器、更新 web.xml 文件、然后重新启动服务器。动态方法让 JSP 页直接指向 TLD 位置,因而是在解释JSP 页面时进行处理。
静态方法提供了页面与库的实际名和位置之间一定程度的非直接性,这可以为您提供一些改变这些属性而不修改页面的灵活性。另一方面,动态方法提供了更大的灵活性,让您可以在运行时增加和移动标记声明。如果您对动态方法感兴趣,但是又担心做了一些改变后、有可能要更新多个页面的维护负担,那么您可以始终将JSP 声明放到一个单独的 JSP 文件中,并在每一个要访问 Web 应用程序的自定义库的页面中加入这一页。这使您具有在运行时只需要更新信息一次就可以增加库的灵活性。
第 5 步. 在 JSP 页面中使用标记完成了所有这些准备工作后,我们就可以在 JSP 页面中使用这些自定义标记了。清单 3 显示了包含                 DateTag 的JSP 页面的浏览器输出:            
清单 3. 带有自定义标记的 JSP 页
1
2
3
4
5
6
7
8
9
10
11
<%@ taglib uri="/WEB-INF/lib/DateTagLib.tld"  prefix="abc" %>
<HTML>
    <HEAD>
        <TITLE>Date tag example</TITLE>
    </HEAD>
     
    <BODY>
        <H1>Date tag Example</H1>
        <p>Hi today is <b><abc:displayDate /></b> </p>
    </BODY>
</HTML>




重新启动 Web 服务器并测试自己的 JSP 页面 !结果看起来类似于图 1 所示。
图 1. DateTag 的浏览器输出用 JSTL 节省时间您所需要的自定义标记功能中也许有多达百分之八十已经由 J2EE 团体创建并标准化了。使用现有的标记库而不是从头创建所有东西会使您节省大量时间和精力。尽管在公共域有数十种库,不过业界汇集了一个特定的自定义库。Java标准标记库(JSTL)是由 Java Community Process 设计的,其参考实现是由 Apache Group 通过 JakartaTaglibs 项目所开发和维护的(参阅 )。            
JSTL 定义了针对常见 Web 应用程序处理需求,如变量支持、流程控制、URL 管理、XML 操作、国际化、数据库访问等等的标记。除了一组丰富的标记外,JSTL还定义了自己的表达式语言(EL)。EL 使我们可以容易地访问应用程序数据并更容易在不使用脚本或者请求时表达式的条件下操作这些数据。
除了节省您从头开发所有标记的时间和精力,JSTL 还具有标准化和业界承认的所有好处。这些好处包括厂商支持、大量介绍文字、以及有很大的机会找到具有JSTL 经验的雇员或者承包商。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0