【问题标题】:Unable to run a jsp page containing jstl tags. says..Unable to read TLD “META-INF/c.tld”无法运行包含 jstl 标记的 jsp 页面。说..无法读取顶级域名“META-INF/c.tld”
【发布时间】:2012-03-22 09:02:01
【问题描述】:

我正在开发一个我想使用 jstl 的 maven 项目。最初,jsp 文件显示异常,如 classnotfound 并且无法找到 org.apache.taglib.standard.....

然后我在 web-inf/tags/template 文件夹中搜索并添加了 c.tld 文件,并在 web.xml 中添加了路径我也尝试将其保留在 web-inf/tags 中,但发生了同样的异常 我还在 web-inf/lib 文件夹中添加了 jstl.jar 和 standard.jar

我还添加了对 pom.xml 的依赖

<dependency>
            <groupId>com.sap.jpaas.service.securestore</groupId>
            <artifactId>
                com.sap.jpaas.service.securestore.feature
            </artifactId>
            <version>0.1.2</version>
        </dependency>
        <dependency>
           <groupId>javax.servlet</groupId>
           <artifactId>jstl</artifactId>
           <version>1.1.2</version>
        </dependency>

        <dependency>   
          <groupId>taglibs</groupId> 
          <artifactId>standard</artifactId> 
          <version>1.1.2</version> 
        </dependency>
        <dependency>   
          <groupId>javax.servlet.jsp</groupId> 
          <artifactId>jsp-api</artifactId> 
          <version>2.0</version>
          <scope>provided</scope>
</dependency>

servlet 的版本是 2.5

毕竟它不起作用... :( 给出以下错误..

org.apache.jasper.JasperException: java.lang.ClassNotFoundException: org.apache.jsp.NewFile_jsp
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:177)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
sun.reflect.GeneratedMethodAccessor65.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:274)
org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:271)
java.security.AccessController.doPrivileged(Native Method)
javax.security.auth.Subject.doAsPrivileged(Unknown Source)
org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:306)
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:166)

根本原因

java.lang.ClassNotFoundException: org.apache.jsp.NewFile_jsp
    java.net.URLClassLoader$1.run(Unknown Source)
    java.security.AccessController.doPrivileged(Native Method)
    java.net.URLClassLoader.findClass(Unknown Source)
    org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:132)
    org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:63)
    org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:172)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
    sun.reflect.GeneratedMethodAccessor65.invoke(Unknown Source)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    java.lang.reflect.Method.invoke(Unknown Source)
    org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:274)
    org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:271)
    java.security.AccessController.doPrivileged(Native Method)
    javax.security.auth.Subject.doAsPrivileged(Unknown Source)
    org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:306)
    org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:166)

刷新后出现以下错误

org.apache.jasper.JasperException: /NewFile.jsp (line: 3, column: 65) Unable to read TLD "META-INF/c.tld" from JAR file "file:/C:/Users/i069130/eclipse/Jpaas-Workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/com.sap.javax.servlet.jsp.jstl_1.2.0.BUILD-20100618.jar": org.apache.jasper.JasperException: Failed to load or instantiate TagLibraryValidator class: org.apache.taglibs.standard.tlv.JstlCoreTLV
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:42)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:408)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:219)
org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:182)
org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:410)
org.apache.jasper.compiler.Parser.parseDirective(Parser.java:475)
org.apache.jasper.compiler.Parser.parseElements(Parser.java:1427)
org.apache.jasper.compiler.Parser.parse(Parser.java:138)
org.apache.jasper.compiler.ParserController.doParse(ParserController.java:242)
org.apache.jasper.compiler.ParserController.parse(ParserController.java:102)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:198)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:373)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:646)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
sun.reflect.GeneratedMethodAccessor65.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:274)
org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:271)
java.security.AccessController.doPrivileged(Native Method)
javax.security.auth.Subject.doAsPrivileged(Unknown Source)
org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:306)
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:166)

我正在使用使用 derby db 的 maven 项目、eclipse indigo 和 sap netweaver neo 服务器

【问题讨论】:

    标签: jsp jakarta-ee maven jstl


    【解决方案1】:

    然后我在 web-inf/tags/template 文件夹中搜索并添加了 c.tld 文件

    这是不对的。去掉它。

    并且还在web.xml中添加了路径

    这也不对。删除它。

    我尝试将它保存在 web-inf/tags 中

    这也不对。删除它。

    安装 JSTL 应该是在 /WEB-INF/lib 文件夹中拥有 JSTL API 和 impl JAR 文件。没有其他事情需要做。您需要确保您的 Maven 配置正在执行此操作。到目前为止,对于 JSTL 1.1 看起来还不错,但是对于 Servlet 2.5,您的 JSP 依赖项是错误的。 JSP 版本应该是 2.1。

    <dependency>   
         <groupId>javax.servlet.jsp</groupId> 
         <artifactId>jsp-api</artifactId> 
         <version>2.1</version>
         <scope>provided</scope>
    </dependency>
    

    当你想使用 JSTL 时,不要忘记在 JSP 顶部声明正确的 taglib URI:

    <%@taglib prefix="c" uri="http://java.sun.som/jsp/jstl/core" %>
    

    另见:

    【讨论】:

    • 进行了更改但仍然无法正常工作...同样的问题.. org.apache.jasper.JasperException: /NewFile.jsp (line: 3, column: 65) Unable to read TLD " META-INF/c.tld”来自 JAR 文件“file:/C:/Users/i069130/eclipse/Jpaas-Workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/com.sap .javax.servlet.jsp.jstl_1.2.0.BUILD-20100618.jar": org.apache.jasper.JasperException: 无法加载或实例化 TagLibraryValidator 类:org.apache.taglibs.standard.tlv.JstlCoreTLV
    猜你喜欢
    • 2011-03-28
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 2018-03-27
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多