无法加载或实例化TagLibraryValidator类:org.apache.taglibs.standard.tlv.JstlCoreTLV

所以我在Gemini运行时的OSGi中使用JSTL。 当我尝试访问我的servlet的url时,我得到以下exception: –

 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 

有更多的捆绑包,但那些是相关的。 所以,我无法理解出了什么问题。

从Spring Source Repository ,我从那里下载了bundle,很明显, org.apache.taglibs.standard bundle – Bundle 121 ,包含了JstlCoreTLV class 。 所以,不确定,这里发生了什么。

这是我正在使用的JSP头文件(以防万一,它是相关的): –

  

我正在使用: –

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

更新: –

下面描述的问题似乎已经解决了,现在我没有得到任何警告,如下所示。 那是因为我有taglibs.standard_1.1.2 – ( Bundle 121 ),这与其他人不兼容。 所以,我删除了它,警告消失了。

所以,你可以忽略这里的任何内容。 但是,上面的问题仍然存在。 我仍然得到JasperException 。 可能这将有助于进一步,因为@BalusC的宝贵意见,现在问题领域现在有所减少。


此后的部分解决了。 所以,你可以忽略它: –

另外,我不确定我拥有的OSGi JSTL包的版本javax.el 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 

正如您所看到的,上面显示了两个不同的URL: –

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

现在,AFAIK这两个URL都不属于同一个JSTL版本。 那么,这会引发一些问题吗? 他们来的原因是什么? 我刚刚使用了一个JSTL bundle

 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混合使用。

这两个冲动相互冲突,这解释了你所看到的所有麻烦。

摆脱1.1.2 impl。

也可以看看:

  • 我们的JSTL维基页面

这只是在黑暗中拍摄的。 不确定你是否发现了下面的链接。

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

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

您的WAR文件中是否存在任何冲突/不兼容的jar库?

这里的另一个也指向构建路径中不兼容的jar: 无法读取TLD“META-INF / c.tld”

我从Tomcat 8升级到Tomcat 9 ,它的catalina.properties125: jstl.jar,taglibs-standard-spec-*.jar, 。 这是否意味着预先安装了build.gradle ,而不像tomcat 8那样在build.gradle中需要build.gradle jstl 1.2

因为我必须删除以下行才能使其正常工作

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

如果我的回答不正确,请告诉我我很乐意将其删除。 既然@BalusC的答案给了我线索。

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

我也一直在努力解决这个问题,直到我切换到Pax Web 。 它几乎开箱即用。 我打算回过头来弄清楚为什么我之前的设置不起作用,但是,它从未发生过。

因此,如果在您的情况下可行,请使用Pax Web手动挑选自己的捆绑包。