【问题标题】:Taglib in JSP not runningJSP 中的 Taglib 未运行
【发布时间】:2017-05-05 14:44:47
【问题描述】:

我正在使用 netBeans 和 glassFish Server 4.1.1

<%@ taglib uri="index.html" prefix="mytag" %>  
<html>  
<body> 
    
<mytag:currentDate/>  
  
</body>  
</html>  

我得到了这样的错误:

org.xml.sax.SAXParseException;行号:12;列号:7;元素类型“meta”必须以匹配的结束标签“”结束。在 com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203) 在 com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:177)在 com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400) 在 com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)在 com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1438) 在 com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1750)在 com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2970) 在 com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java: 606) 在 com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScanne rImpl.java:118) 在 com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510) 在 com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse( XML11Configuration.java:848) 在 com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777) 在 com.sun.org.apache.xerces.internal.parsers.XMLParser.parse( XMLParser.java:141) 在 com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:243) 在 com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse( DocumentBuilderImpl.java:339) 在 org.apache.jasper.xmlparser.ParserUtils.parseXMLDocument(ParserUtils.java:298) 在 org.apache.jasper.xmlparser.ParserUtils.parseXMLDocument(ParserUtils.java:351) 在 org.apache.jasper .compiler.TagLibraryInfoImpl.parseTLD(TagLibraryInfoImpl.java:340) 在 org.apache.jasper.compiler.TagLibraryInfoImpl.(TagLibraryInfoImpl.java:254) 在 org.apache.jasper.compiler.Pars er.parseTaglibDirective(Parser.java:502) at org.apache.jasper.compiler.Parser.parseDirective(Parser.java:582) at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1657) at org .apache.jasper.compiler.Parser.parse(Parser.java:185) 在 org.apache.jasper.compiler.ParserController.doParse(ParserController.java:244) 在 org.apache.jasper.compiler.ParserController.parse(ParserController .java:145) 在 org.apache.jasper.compiler.Compiler.compile(Compiler.java:451) 在 org.apache.jasper 的 org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:212)。 JspC.processFile(JspC.java:1171) at org.apache.jasper.JspC.execute(JspC.java:1338) at org.netbeans.modules.web.project.ant.JspC.main(JspC.java:101)在 org.netbeans.modules.web.project.ant.JspCSingle.main(JspCSingle.java:119) org.apache.jasper.JasperException: 文件:C:/Users/Queue/OneDrive/JspExE/build/web/WEB- INF/tlb.jsp(1,44) PWC6178:文件 /WEB-INF/index.html 上的 XML 解析错误:(第 12 行,第 7 列)org.apache.ja sper.JasperException: C:/Users/Queue/OneDrive/JspExE/build/web/WEB-INF/tlb.jsp(1,44) org.apache.jasper.JasperException: file:C:/Users/Queue/OneDrive/ JspExE/build/web/WEB-INF/tlb.jsp(1,44) PWC6178:文件 C:\Users\Queue\OneDrive\JspExE\nbproject\build-impl.xml 上的 XML 解析错误:936:Java 返回:1构建失败(总时间:1 秒)

【问题讨论】:

    标签: java xml jsp taglib


    【解决方案1】:

    文件index.html 是一个html 文件。 taglib 指令的 URI 属性中不能使用 HTML 代替 TLD。

    来自java tutorial:

    uri属性是指唯一标识标签的URI 库描述符 (TLD),描述标签库的文档 (请参阅标记库描述符)。

    标记库描述符文件名必须具有扩展名.tld。顶级域名 文件存储在 WAR 的 WEB-INF 目录或子目录中 文件,或在标签库的META-INF 目录或子目录中 打包在一个 JAR 中。您可以直接或间接引用 TLD。

    以下 taglib 指令直接引用 TLD 文件名:

    <%@ taglib prefix="tlt" uri="/WEB-INF/iterator.tld"%>
    

    这个taglib 指令使用一个简短的逻辑名称来间接地 引用 TLD:

    <%@ taglib prefix="tlt" uri="/tlt"%>
    

    嵌套在jsp-config 元素中的是taglib 元素,它提供 有关应用程序页面使用的标签库的信息。 taglib 元素内部是 taglib-uri 元素和 taglib-location 元素。 taglib-uri 元素标识逻辑 标签库的名称。 taglib-location 元素给出了 标签库的绝对位置或绝对URI。

    JSTL 库的绝对 URI 如下:

    Core: http://java.sun.com/jsp/jstl/core
    
    XML: http://java.sun.com/jsp/jstl/xml
    
    Internationalization: http://java.sun.com/jsp/jstl/fmt
    
    SQL: http://java.sun.com/jsp/jstl/sql
    
    Functions: http://java.sun.com/jsp/jstl/functions
    

    当您使用绝对 URI 引用标记库时, 匹配在 TLD 的 taglib 元素中声明的 URI(请参阅标签 库描述符),您不必将 taglib 元素添加到 web.xml; JSP 容器会自动在 JSTL 库实现。包括标签库实现

    除了声明标签库外,还必须制作标签 Web 应用程序可用的库实现。有 有几种方法可以做到这一点。可以包括标签库实现 在 WAR 中以未打包的格式:标签文件打包在 /WEB-INF/tag/ 目录,标签处理程序类被打包在 /WEB-INF/classes/ WAR 目录。标签库已经打包 JAR 文件包含在/WEB-INF/lib/ 目录中 战争。最后,应用服务器可以将标签库加载到所有 在服务器上运行的 Web 应用程序。例如,在 Application Server、JSTL TLD 和库分布在 在as-install/lib/ 中存档appserv-jstl.jar。这个图书馆是 自动加载到所有 Web 应用程序的类路径中 在 Application Server 上运行,因此您无需将其添加到您的 网络应用程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-25
      • 2011-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多