无法加载或实例TagLibraryValidator类:org.apache.taglibs.sta

2019-07-18 13:03发布

所以我用JSTL工作在OSGi中,在双子座运行。 而我得到以下异常,当我尝试访问的URL我servlet : -

SEVERE: Servlet.service() for servlet jsp threw exception
org.apache.jasper.JasperException: /WEB-INF/login.jsp (line: 3, column: 66) Unable to read TLD "META-INF/c.tld" from JAR file "file:/D:/OSGi%20Runtime/Gemini/gemini-web/dep/com.springsource.javax.servlet.jsp.jstl-1.2.0.v20110728.jar": org.apache.jasper.JasperException: Failed to load or instantiate TagLibraryValidator class: org.apache.taglibs.standard.tlv.JstlCoreTLV

不过,我已签,我已经在我运行时所需的所有包。 相关的捆绑,我已是: -

71  ACTIVE      javax.servlet_3.0.0.v201103241009
73  ACTIVE      javax.el_2.2.0.v201105051105
74  ACTIVE      javax.servlet.jsp_2.2.0.v201103241009
75  ACTIVE      com.springsource.javax.servlet.jsp.jstl_1.2.0.v20110728
121 ACTIVE      com.springsource.org.apache.taglibs.standard_1.1.2.v20110517

还有更多的捆绑,但这些都是相关的人。 所以,我不明白什么地方出了错。

从春源库 ,从那里我下载的包,很明显的是, org.apache.taglibs.standard捆绑- 捆绑121,包含JstlCoreTLV class 。 所以,不知道,这是怎么回事的。

这里是我的JSP头我使用(以防万一,它是相关的): -

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

我正在使用: -

  • Servlet 3.0
  • JSP 2.2
  • Gemini Runtime 2.1
  • JSTL 1.2.0

更新: -

下面所描述的问题似乎解决了,现在我没有得到任何警告,如下图所示。 那是因为,我是有这个taglibs.standard_1.1.2 - (121包 ),这是不兼容给他人。 所以,我删除了它,并警告就走了。

所以,你可以忽略不管有没有从这里开始。 但是,上面的问题仍然存在。 我仍然收到这个JasperException 。 可能这将进一步帮助,因为问题域一点点的感谢减少到现在的从@BalusC提出的宝贵意见。


之后,这部分解决。 所以,你可以忽略它: -

此外,我不知道,我有OSGi的JSTL包的版本- Bundle 75 ,与其他捆绑兼容- javax.eltaglibsservlets等,还是不行。 因为我使用JSTL 1.2.1 ,但我无法得到捆JSTL 1.2.1 。 我得到的是我用束( JSTL 1.2.0 )。 为什么这是困扰我是因为这些类型的邮件上来的,当我开始我的应用程序: -

Jan 22, 2013 7:14:05 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/core is already defined
Jan 22, 2013 7:14:05 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/core is already defined
Jan 22, 2013 7:14:05 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/fmt_rt is already defined
Jan 22, 2013 7:14:05 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/fmt is already defined
Jan 22, 2013 7:14:05 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/fmt is already defined
Jan 22, 2013 7:14:05 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/functions is already defined

正如你可以看到,上面显示有两个不同的网址: -

  • URI: http://java.sun.com/jstl/core
  • URI: http://java.sun.com/jsp/jstl/core

现在,据我所知这两个网址,不属于同一个JSTL的版本。 所以,可能是提出一些问题? 什么可以为他们来的原因是什么? 我刚才用一个JSTL bundle

Answer 1:

com.springsource.javax.servlet.jsp.jstl_1.2.0.v20110728
com.springsource.org.apache.taglibs.standard_1.1.2.v20110517

你混合JSTL 1.2.0 API + IMPL与JSTL 1.1.2 IMPL。

两个impls彼此这就解释了所有你看到的麻烦冲突。

摆脱1.1.2 IMPL的。

也可以看看:

  • 我们JSTL wiki页面


Answer 2:

这仅仅是一个在黑暗中拍摄。 不知道你是否临到下面的链接。

您发布的错误消息“无法加载或实例TagLibraryValidator类:org.apache.taglibs.standard.tlv.JstlCoreTLV”似乎是很常见的。

从这个链接: http://christerblog.wordpress.com/2010/05/04/tag-library-woes-deploying-war-on-tomcat-6/

你有没有在你的WAR文件的任何冲突的/不兼容的Jar库?

另一位在这里还指出,在构建路径不兼容的罐子: 无法读取TLD“META-INF / c.tld”



Answer 3:

我升级从Tomcat 8Tomcat 9 ,它具有125: jstl.jar,taglibs-standard-spec-*.jar,在其catalina.properties 。 这是否意味着JSTL是预装的,不像tomcat的8那里jstl 1.2需要在build.gradle

因为我不得不删除以下行得到它的工作

//compile group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.0'
//compile group: 'javax.servlet.jsp.jstl', name: 'jstl', version: '1.2'

如果我的回答是不正确,请让我知道我很高兴将其删除。 由于@BalusC答案给我的线索。



Answer 4:

首先,我不认为我能真正回答这个问题,不知道这是否与你有关的。

我这个问题太挣扎,直到我切换到大同网络 。 它的工作几乎开箱。 我打算回去弄清楚到底为什么我以前的设置没有工作,但是,好了,它从来没有发生过。

因此,如果是在你的情况有可能,使用大同网络在手工采摘自己的包。



文章来源: Failed to load or instantiate TagLibraryValidator class: org.apache.taglibs.standard.tlv.JstlCoreTLV