站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Netbeans 专题使用 NetBeans IDE 5.0 开发标记库教程

使用 NetBeans IDE 5.0 开发标记库教程

摘要: 使用 NetBeans IDE 5.0 开发标记库教程 反馈 标记库是用于处理 JavaServer Pages!' 页面(JSP!' 页面)中常用功能(如格式化文本、加载图形和显示当前日期)的标记集...
使用 NetBeans IDE 5.0 开发标记库教程

标记库是用于处理 JavaServer Pages!" 页面(JSP!" 页面)中常用功能(如格式化文本、加载图形和显示当前日期)的标记集合。根据在 JSP 文件中它的正文内容可以对标记进行分类:

由于 NetBeans IDE 5.0 实现了 JavaServer Pages!" 2.0 规范,因此,您可以选择用 JSP 语法创建标记文件 或用 Java 编程语言创建标记句柄,或两者都使用。标记文件对标记句柄的作用就像 JavaServer Pages 页面对 Java!" servlet 的作用:它们使 web 开发者能够创建复杂的功能,而不需要熟悉 Java 编程语言。

标记库描述符 (TLD) 是一个 XML 文档,该文档将库中的每个标记映射到它关联的标记句柄,或者映射到它关联的标记文件。TLD 描述了与标记库中标记关联的参数和脚本变量。

尽管它是一个 taglib 指令,但是却可以将标记库用于使用 JavaServer Pages!" 技术(JSP!" 页面)创建的页面。

标记库教程向您介绍如何创建自己的标记库以及如何在 web 应用程序中使用它的标记。但是,通常您不需要创建自己的标记,因为其他人已经创建了很多标记。本教程向您介绍如何将这些外部标记合并到您自己的 web 应用程序中。

本教程中构建的 web 应用程序将向您介绍如何执行以下操作:

本教程可以在一个小时内完成。


设置 Web 应用程序


创建新的 web 应用程序

  1. 选择 File > New Project。在 Categories 下选择 Web。在 Projects 下,选择 Web Application 并单击 Next。
  2. 在 Name and Location 面板中,在 Project Name 下键入 MyCompany。然后将 Project Location 设置为您计算机上的任何文件夹。从现在起,我们将此文件夹称为 $PROJECTHOME。选中 Set as Main Project 复选框。注意,Context Path 是 /MyCompany。单击 Finish。

IDE 将创建 $PROJECTHOME/MyCompany 项目文件夹。项目文件夹包括所有的源代码和项目元数据,例如项目 Ant 脚本。MyCompany 项目在 IDE 中打开。可以在 Projects 窗口中查看其逻辑结构,在 Files 窗口中查看其文件结构。

访问和包含图形

  1. http://www.netbeans.org/files/documents/4/688/taglib.zip 下载 taglib.zip
  2. taglib.zip 文件解压缩到您的 web 应用程序的 web 文件夹。您可以在 Projects 窗口中看到 $PROJECTHOME/MyCompany/web/logos 文件夹。该文件夹包含 LogoLarge.gif 文件和 LogoSmall.gif 文件,如下所示:

访问外部标记

通常,您不需要自己创建自定义标记。在 web 应用程序中可以免费使用很多自定义标记。

访问 bundled JSTL 1.1 库中的标记

在本教程的后面部分,您将创建使用 JSTL 1.1 库中标记的标记文件。该库是与 NetBeans IDE 5.0 一起打包的。但是,您需要将它添加到您项目的类路径中。

  1. 在 Projects 窗口中右键单击 MyCompany 项目的 Libraries 节点,并选择 Add Library。将显示您的库以及与 NetBeans IDE 5.0 一起打包的库。JSTL 1.1 是打包的库之一。
  2. 选择 JSTL 1.1 并单击 Add Library。

    现在 Libraries 节点包含两个由 JSTL 1.1 库组成的 JAR 文件:

访问 Jakarta 项目的 DateTime Tag Library 中的标记

在本教程的后面部分,您将创建使用 Jakarta 项目的 DateTime Tag Library 中标记的 JSP 文件。该库包含可以用于处理与日期和时间有关的功能的标记。例如,用于格式化日期以便进行输出的标记、从 HTML 格式输入生成的日期的标记、使用时区和本地化的标记。

  1. http://jakarta.apache.org/site/downloads/downloads_taglibs.html 下载 DateTime Tag Library,然后解压缩。
  2. 在 Projects 窗口中,右键单击 MyCompany 项目的 Libraries 节点,并选择 Add JAR/Folder。
  3. 浏览并选择 taglibs-datetime.jar 文件。

    现在 Libraries 节点包含 taglibs-datetime.jar 文件。

创建标记库描述符

对于您在本教程中创建的每个标记句柄,IDE 生成从 SimpleTagLib TLD 文件到标记句柄的 Java 类中标记的实现。只有您希望在本教程中使用标记句柄 的情况下,例如使用 Java 源文件而不是 JSP 文件,则需要创建一个 TLD。标记文件 即在 JSP 语法中而不是在 Java 编程语言中定义的标记,不需要 在 TLD 中注册,因此,此处也不需要 IDE 注册。

  1. 右键单击 MyCompany 项目节点并选择 New > File/Folder。在 Categories 下选择 Web。在 File Types 下,选择 Tag Library Descriptor 并单击 Next。
  2. 在 Name and Location 面板中,在 TLD Name 文本框中键入 SimpleTagLib
  3. 在 URI 文本框中,键入 http://netbeans.org/tlds/SimpleTagLib
  4. 单击 Finish。

IDE 创建 web/WEB-INF/tlds 文件夹并向它中添加标记库描述符。SimpleTagLib.tld 在 Source Editor 中打开。

创建用来显示图形的空标记

您不需要了解 Java 编程语言也可以创建标记。如果喜欢使用 JSP 语法,则使用方案 1 来创建标记文件。否则使用方案 2 创建使用 Java 编程语言标记句柄。

方案 1:JSP 语法

  1. 右键单击 MyCompany 项目节点并选择 New > File/Folder。在 Categories 下选择 Web。在 File Types 下,选择 Tag File 并单击 Next。
  2. 在 Tag File Name 文本框中,键入 DisplayLogoTag。注意,IDE 将向 WEB-INF/tags 文件夹添加此标记文件。单击 Finish。DisplayLogoTag.tag 在 Source Editor 中打开。
  3. 用以下内容替换默认代码:
       <%@tag description = "Display logo" pageEncoding="UTF-8"%>
       <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
       <%@attribute name="size" required="true"%>
    
           <c:choose>
       <c:when test="${size == 'large'}">
           <img
    src='logos/LogoLarge.gif'
                    align='Center'>
       </c:when>
       <c:otherwise>
                   <img
                    src='logos/LogoSmall.gif'
                    align='Center'>
               </c:otherwise>
           </c:choose>
    
       <jsp:doBody/>
    
    

    注意: 此标记文件包含一个 <%@taglib> 指令和一个 uri 属性,它指定前缀 c 是指 JSTL 1.1 库中的标记句柄。有关此指令的详细信息,请参阅下面的使用标记部分。为了能够使用 JSTL 1.1 库,您必须将它添加到您的 web 应用程序中,如上面的访问打包的 JSTL 1.1 库中的标记部分所述。

  4. 按 Ctrl-Shift-F 格式化该文件。
  5. 按 Ctrl-S 保存文件。

方案 2:Java 编程语言

  1. 右键单击 MyCompany 项目节点并选择 New > File/Folder。在 Categories 下选择 Web。在 File Types 下,选择 Tag Handler 并单击 Next。
  2. 在 Class Name 文本框中键入 DisplayLogoTag 并在 Package 下拉列表中键入 org.me.logo。注意,IDE 将向 org.me.logo 包添加此标记句柄。确保选中 SimpleTagSupport 并单击 Next。
  3. 单击 Browse 并在 WEB-INF/tlds 文件夹中选择 SimpleTagLib 标记库。
  4. 在 Body Content 下选择 Empty。
  5. 单击 New。在 Attribute Name 文本框中,键入 size并选择 Required Attribute 复选框。单击 OK。
  6. 单击 Finish。

    DisplayLogoTag.java 在 Source Editor 中打开。

  7. 如果看不到 Navigator,则选择 Window > Navigator (Ctrl-7)。在 Navigator 中,选择 doTag()。将光标放在 doTag 方法上。
  8. 通过用以下代码替换第一个 // TODO 部分来修改 doTag 方法:
        if (size.equals("large"))
          out.println("<img src='logos/LogoLarge.gif' align='Center' />");
        else
    out.println("<img src='logos/LogoSmall.gif' align='Center' />");
    
    
  9. 按 Ctrl-Shift-F 格式化该文件。
  10. 按 Ctrl-S 保存文件。

创建用来格式化文本的无脚本的标记

同样,您不需要了解 Java 编程语言也可以创建标记。如果喜欢使用 JSP 语法,则使用方案 1 来创建标记文件。否则使用方案 2 创建使用 Java 编程语言标记句柄。

方案 1:JSP 语法

  1. 右键单击 MyCompany 项目节点并选择 New > File/Folder。在 Categories 下选择 Web。在 File Types 下,选择 Tag File 并单击 Next。
  2. 在 Tag File Name 文本框中,键入 FormatTextTag。注意,IDE 将向 WEB-INF/tags 文件夹添加此标记文件。单击 Finish。FormatTextTag.tag 在 Source Editor 中打开。
  3. 用以下内容替换默认代码:
       <%@tag description = "Format text" pageEncoding="UTF-8"%>
       <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
       <%@attribute name="style" required="true"%>
    
          <c:choose>
       <c:when test="${style == 'official'}">
           <b><i><font size='+3' color='red'>
       </c:when>
       <c:otherwise><font size='+1'></c:otherwise>
           </c:choose>
    
       <jsp:doBody/>
    
           <c:choose>
       <c:when test="${style == 'official'}">
           </font></i></b>
       </c:when>
       <c:otherwise></font></c:otherwise>
           </c:choose>
    
    

    注意: 此标记文件包含一个 <%@taglib> 指令和一个 uri 属性,它指定前缀 c 是指 JSTL 1.1 库中的标记句柄。有关此指令的详细信息,请参阅下面的使用标记部分。为了能够使用 JSTL 1.1 库,您必须将它添加到您的 web 应用程序中,如上面的访问打包的 JSTL 1.1 库中的标记部分所述。

  4. 按 Ctrl-Shift-F 格式化该文件。
  5. 按 Ctrl-S 保存文件。

方案 2:Java 编程语言

  1. 右键单击 MyCompany 项目节点并选择 New > File/Folder。在 Categories 下选择 Web。在 File Types 下,选择 Tag Handler 并单击 Next。
  2. 在 Class Name 文本框中,键入 FormatTextTag。确保 IDE 将向 org.me.logo 包的 Source Packages 文件夹中添加此标记句柄。确保选中 SimpleTagSupport 并单击 Next。
  3. 单击 Browse 并在 WEB-INF/tlds 文件夹中选择 SimpleTagLib 标记库。
  4. 确保选中 Body Content 下的 Scriptless。
  5. 单击 New。在 Attribute Name 文本框中,键入 style并选择 Required Attribute 复选框。单击 OK。
  6. 单击 Finish。FormatTextTag.java 在 Source Editor 中打开。
  7. 从 Navigator 中选择 doTag。将光标放在 Source Editor 中的 doTag 方法上。
  8. 修改 doTag 方法如下:

    • 用以下内容替换第一个 // TODO 部分:
            if (style.equals("official"))
            out.println("<b><i><font size='+3' color='red'>");
            else
               out.println("<font size='+1'> ");
      
      
    • 用以下内容替换第二个 // TODO 部分:
            if (style.equals("official"))
      out.println("</font></i></b>");
            else
      out.println("</font>");
      
      

  9. 按 Ctrl-Shift-F 格式化该文件。
  10. 按 Ctrl-S 保存文件。

在 JSP 文件中使用标记


方案 1:参考标记文件(JSP 语法)

  1. 在 Projects 窗口中,展开 MyCompany 项目节点和 Pages 节点。注意,IDE 已创建默认的 JavaServer Pages 页面 index.jsp
  2. 双击 index.jsp。将在 Source Editor 中打开此文件。
  3. 在 Source Editor 中,创建 taglib 指令如下:
    • 在最后一个 <%@page> 指令下插入一行并键入 <%@taglib。代码完成框将再次打开并显示 <%@taglib>。按 Enter。如果代码完成框未出现,则按 Ctrl-Space。
    • 按空格键。代码完成框打开并显示 taglib 指令的所有属性。如果代码完成框未打开,则按 Ctrl-Space 手动打开它。
    • 在代码完成框中使用箭头键选择 prefix 并按 Enter。
    • 再次按空格键并选择 tagdir,然后按 Enter。
    • 在前缀的引号标记之间键入 disp
    • 将光标放在 tagdir 的引号标记之间,然后按 Ctrl-Space。代码完成框将再次打开并显示所有 web 应用程序的标记库。
    • 使用箭头键选择 /WEB-INF/tags 并按 Enter。taglib 指令应该看起来类似以下行:
          <%@taglib prefix="disp" tagdir="/WEB-INF/tags" %>
  4. 现在参考 Jakarta 项目的标记句柄在 JSP 文件中使用标记

方案 2:参考标记句柄(Java 编程语言)

  1. 在 Projects 窗口中,展开 MyCompany 项目节点和 Pages 节点。注意,IDE 已创建默认的 JavaServer Pages 页面 index.jsp
  2. 双击 index.jsp。将在 Source Editor 中打开此文件。
  3. 在 Source Editor 中,创建 taglib 指令如下:
    • 在最后一个 <%@page> 指令下插入一行并键入 tglb,然后单击空格键。
    • uri 属性的空引号标记中,按 Ctrl-Space。代码完成框将打开并显示所有 web 应用程序的标记库。
    • 使用箭头键选择 http://netbeans.org/tlds/SimpleTagLib 并单击 Enter。
    • uri 属性的最后引号之后添加一个空格,按 Ctrl-Space,选择 prefix 并单击 Enter。
    • 在前缀的引号标记之间键入 disp。taglib 指令应该看起来类似以下行:
          <%@taglib uri="http://netbeans.org/tlds/SimpleTagLib" prefix="disp" %>

两个方案:通过 DateTime-1.0 TLD 文件参考 Jakarta 项目的标记句柄

两个方案:在 JSP 文件中使用标记

  1. index.jsp 中,用以下代码替换 <body> 标记及其内容:
       <body>
          <disp:DisplayLogoTag size="large"/>
          <disp:FormatTextTag style="official">My Company</disp:FormatTextTag>
    
          <p><blockquote>This is <disp:FormatTextTag style="professional">My Company</disp:FormatTextTag>.
          It's a fun company and we make extremely useful products.</blockquote>
    
          <p align="center"><disp:DisplayLogoTag size="small"/>
          My Company<br>
          1234 Any St.<br>
          Anytown, CA 95110
    
          <br><br>
          Today's date: <b><dt:format pattern="MM/dd/yyyy"><dt:currentTime/></dt:format></b>
    
       </body>
    
    
  2. 按 Ctrl-Shift-F 格式化该文件。
  3. 按 Ctrl-S 保存文件。

编译和执行 web 应用程序


构建项目

  • 选择 Build > Build Main Project (F11)。将构建 MyCompany 项目。

运行项目

  1. 从 Run 菜单选择 Run > Run Main Project (F6)。双击 Output 窗口的标题栏使它最大化,以便能看到所有的输出。最后,它使用 IDE 的默认服务器部署 web 应用程序,如下所示:

  2. 双击 Output 窗口的标题栏使它还原为正常大小。选择 Files 窗口并展开该项目节点。构建类文件位于 build 文件夹中。构建 WAR 文件 (MyCompany.war) 位于 dist 文件夹中。

生成 Javadoc

  • 在 Projects 窗口中,右键单击该项目节点,并选择 Generate Javadoc for Project。将在 Output 窗口中显示 Javadoc 输出,此时显示 Javadoc 的 Web 浏览器将打开。

故障排除

如果您选择 Java 方法(方案 2)来创建标记句柄,则您只能使用以下两个故障解决策略。

验证您的标记是否使用规定的正文内容

本教程中创建的 SimpleTagLib TLD 文件将库中的标记映射到关联的标记句柄。当您编译 index.jsp 文件时,NetBeans IDE 识别在 JSP 文件中使用的映射和相应的标记使用方法之间的冲突。为了说明此问题,请执行以下操作:

  1. 展开 MyCompany 项目节点,展开 Web Pages 节点,展开 WEB-INF 节点,接着展开 tlds 节点。双击 SimpleTagLib.tld 节点。该标记库描述符将在 Source Editor 中打开。
  2. 将 FormatTextTag 的 <bodycontent> 标签的值从 scriptless 更改为 empty
  3. 双击 index.jsp 文件。将在 Source Editor 中打开此文件。注意,FormatTextTag 不为空。例如,它的第一个实例如下:
        <disp:FormatTextTag style="official">My Company</disp:FormatTextTag>
    将其与 DisplayLogoTag 的实例对比,DisplayLogoTag 的实例在 index.jsp 文件中为 空。
        <disp:DisplayLogoTag size="large"/>
        <disp:DisplayLogoTag size="small"/>
  4. 确保您的 JSP 文件的 <%@taglib> 指令指向 SimpleTagLib.tld 标记库描述符。<%@taglib> 指令应该看起来类似以下行:
        <%@taglib uri="http://netbeans.org/tlds/SimpleTagLib" prefix="disp" %>
  5. 右键单击 index.jsp 并从上下文菜单中选择 Compile File (F9)。由于以下错误无法编译 JSP 文件:
        org.apache.jasper.JasperException:  According to TLD, tag disp:FormatTextTag
        must be empty, but is not
  6. SimpleTagLib.tld 文件中,将 FormatTextTag 的 <bodycontent> 标签的值从 empty 更改回 scriptless
  7. 再次右键单击 index.jsp 并从上下文菜单中选择 Compile File (F9)。将编译 JSP 文件。

验证您的标记是否使用规定的标记库

PermittedTaglibsTLV 验证器是 JSTL 1.1 库的一部分。它允许 TLD 限制除了它自身之外可能导入到 JSP 文件中的标记库。

注意: 您必须在 <param-value> 部分中指定允许的标记库的 URI。标记库具有一个 URI 属性,而标记文件没有。因此,PermittedTaglibs 验证器是标记句柄当前唯一支持的验证器。

  1. 右键单击 MyCompany 项目节点并选择 New > Tag Library Descriptor。
  2. 在 Class Name 文本框中,键入 ApprovedTagLibs
  3. 在 URI 文本框中,键入 http://netbeans.org/tlds/ApprovedTagLibs
  4. 单击 Finish。IDE 向它中添加此标记库描述符。ApprovedTagLibs.tld 在 Source Editor 中打开。
  5. 在 Source Editor 中,用以下内容替换默认的 <validator> 标记:
  6.    <validator>
          <validator-class>
            javax.servlet.jsp.jstl.tlv.PermittedTaglibsTLV
          </validator-class>
          <init-param>
               <param-name>permittedTaglibs</param-name>
       <param-value>
           http://jakarta.apache.org/taglibs/datetime-1.0
               </param-value>
          </init-param>
       </validator>
    
    
  7. index.jsp 文件中添加一个 taglib 指令以参考 ApprovedTagLibs TLD 文件:
        <%@taglib uri="http://netbeans.org/tlds/ApprovedTagLibs" prefix="apptglib" %>
  8. 右键单击 index.jsp 并从上下文菜单中选择 Compile File (F9)。由于以下错误无法编译 JSP 文件:
        org.apache.jasper.JasperException: <h3>Validation error messages from TagLibraryValidator
        for accepted-taglibs<p>null: taglib apptglib (urn:jsptld:/WEB-INF/tlds/accepted-taglibs)
        allows only the following taglibs to be imported: [http://jakarta.apache.org/taglibs/datetime-1.0]</p>
  9. ApprovedTagLibs.tld 文件中,将 http://netbeans.org/tlds/SimpleTagLib 行添加到 <param-value> 部分。现在该验证器应该如下所示:
       <validator>
          <validator-class>
            javax.servlet.jsp.jstl.tlv.PermittedTaglibsTLV
          </validator-class>
          <init-param>
               <param-name>permittedTaglibs</param-name>
       <param-value>
           http://jakarta.apache.org/taglibs/datetime-1.0
                   http://netbeans.org/tlds/SimpleTagLib
               </param-value>
          </init-param>
       </validator>
    
    
  10. 再次右键单击 index.jsp 并从上下文菜单中选择 Compile File (F9)。将编译 JSP 文件。

下一步

有关使用 NetBeans IDE 5.0 的更多信息,请参见以下参考资料:

要发送评论和建议、获得支持和随时获得关于 NetBeans IDE J2EE 开发特性的最新发展情况,请加入 nbj2ee@netbeans.org 邮件列表。有关 NetBeans IDE 中即将到来的 J2EE 开发特性的更多信息,请参见 j2ee.netbeans.org .




↑返回目录
前一篇: 使用 NetBeans IDE 5.0 开发 Web 应用程序教程
后一篇: 使用 NetBeans IDE 5.0 开发 Applet 教程