/ WEB-INF / classes vs / WEB-INF / lib

时间:2011-01-19 18:44:10

标签: java web-applications java-ee

我想将我的Java EE6网络类(bean,过滤器,servlet)打包到jar中,并将其与其他实用程序jar一起放入/WEB-INF/lib/目录并完全放弃/WEB-INF/classes/目录

在类加载,访问应用程序上下文等方面,两者之间是否存在实质性差异?

感谢。

PS:每当使用Google搜索任何java规范时,我总是会重定向到Oracle文档索引,该索引距离原始URL几十次。谁知道那里发生了什么?

3 个答案:

答案 0 :(得分:21)

我会去/WEB-INF/classes。它允许您在调试模式下运行应用程序,在更改时运行热交换类。如果您将所有内容打包为jar,则每次更改类时都必须重新打包并重新部署应用程序。

答案 1 :(得分:15)

嗯,很快:想象一下你有org.example.Test.class课,如果你把它放在jar和WEB-INF/lib/目录中,并将同一个类复制到WEB-INF/classes/,那么该应用程序的类加载器将使用最后一个(来自WEB-INF/classes/)。

有时你可以使用它作为优势 - 我有一个库,它有一个bug ...我寻找那个类的来源(bug在哪里;我想念我知道那个bug在那个类中的部分,这是另一个故事),我使用固定代码将该类添加到项目中,并将其编译为WEB-INF/classes/,而库仍然存在于WEB-INF/lib/中。固定类将被使用,直到库被修复。

答案 2 :(得分:0)

在Tomcat Servlet容器的定义中:WEB-INF\classes之前搜索WEB-INF\lib。您可以选择将类加载委托给自定义类加载器 - 即使这样,上面的顺序也会保留。

如果您选择使用其他提供商,例如JBOss,Glassfish,Jetty它可能有不同的顺序,但我不确定那些。