2011-09-27 71 views
0

为什么不能在我的web-inf/lib目录中存在tld文件的JSTL罐子被tomcat很好地读取,但是当我移动到jBoss 5时不能正常读取?基本问题复杂的解决方案 - Tomcat到JBoss

这是一个类加载器的问题?

我试过研究,但没有明确的答案。我读了一篇大型的类加载器相关文章,但并不确定这对我的应用程序实际上如何适用。

任何帮助,将不胜感激。

预先感谢 阿西

回答

2

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的Web应用程序都将能够使用JSTL,而无需在/WEB-INF/lib中包含JAR。

+0

现在做这件事后,我仍然有同样的问题http://java.sun.com/jsp/jstl/core不能解决在web.xml或与此应用程序部署的jar文件。但是,当我有一个新的Web应用程序有一个JSP,它具有JSTL调用,并且WEB-INF/lib中没有JSTL jar,并且这种工作就像一个魅力。但对于我从tomcat移动的应用程序,相同的解决方案失败。那是一个SPRING + TILES应用程序,其中一些自定义tld文件存在于tld文件夹和web.xml中的相应条目中。我尝试删除自定义tld和条目,并且错误不会改变。任何建议?感谢您的时间。 – Mustafa

+0

此外,当我从应用程序,无法工作的应用程序,即我创建的新应用程序复制所有罐子,新的应用程序仍然工作。 – Mustafa

+0

FWIW:'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的方法:http://stackoverflow.com/questions/24262223/recommended-way-for-adding-jslt-1-2-1-in-a-maven-project –