【发布时间】:2011-09-27 00:23:30
【问题描述】:
为什么在我的 web-inf/lib 目录中存在 tld 文件的 JSTL jar 不能被 tomcat 很好地读取,但当我迁移到 jBoss 5 时却不能?
是类加载器的问题吗?
我尝试研究,但没有明确的答案。我阅读了一篇与类加载器相关的大型文章,但不确定它如何实际应用于我的应用程序。
任何帮助将不胜感激。
提前致谢 阿西夫
【问题讨论】:
标签: jstl classloader jboss5.x
为什么在我的 web-inf/lib 目录中存在 tld 文件的 JSTL jar 不能被 tomcat 很好地读取,但当我迁移到 jBoss 5 时却不能?
是类加载器的问题吗?
我尝试研究,但没有明确的答案。我阅读了一篇与类加载器相关的大型文章,但不确定它如何实际应用于我的应用程序。
任何帮助将不胜感激。
提前致谢 阿西夫
【问题讨论】:
标签: jstl classloader jboss5.x
Tomcat 是一个简单的 JSP/Servlet 容器,仅附带 JSP 和 Servlet API。 JBoss 是一个更成熟的 Java EE 应用服务器,它附带了几乎整个 Java EE API,包括 JSTL。
当您将 JSTL 与您自己的 webapp 一起发布时,它的 API/impl 版本很可能会与 JBoss 已经在使用的版本发生冲突。 JBoss 将加载它自己的 JSTL API(jstl.jar),但 webapp 将加载 JSTL impl(standard.jar)。您实际上应该从您的 web 应用程序中删除 JSTL JAR 并使用 JBoss 的。为了让 JSTL 在 Tomcat 上同样适用于同一个 webapp,您还可以将 JAR 添加到 Tomcat 自己的 /lib 文件夹中。这样,每个部署到 Tomcat 的 webapp 都可以使用 JSTL,而无需在 /WEB-INF/lib 中包含 JAR。
【讨论】:
find /c/_/jboss-eap-6.1 -name *jstl*.jar 产生/c/_/jboss-eap-6.1/modules/system/layers/base/javax/servlet/jstl/api/main/jboss jstl-api_1.2_spec-1.0.3.Final.jar。这包含实现也有一个\org\apache\taglibs\standard 树(其名称中的 api 有点令人困惑)。仍在寻求 1.2.1 的解决方法:stackoverflow.com/questions/24262223/…