我必须在我的web应用程序的web.xml中添加一个过滤器,该过滤器使用jar文件中的目录结构,我将添加到我的web应用程序的lib目录中。
<filter>
<filter-name>monitor</filter-name>
<filter-class>com.student.compute</filter-class>
</filter>
<filter-mapping>
<filter-name>monitor</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这里的过滤器使用jar文件中com.student包中的“compute”类。我已经扩展了jar文件并确认了这个结构是否存在。
现在在我的classes目录中,我也有一个com目录,其中包含许多特定于我的应用程序的类。
当我尝试访问我的Web应用程序中的内容时,现在jar文件中的com和classes目录中的com不会发生冲突。
请澄清。
答案 0 :(得分:1)
不,他们不会发生冲突。如果这是一个问题,你不能同时使用几个库,例如Apache,因为它们都将它们的类放在org.apache的某个子包下。
您可以将类路径中所有类的包树看作一个巨型树,其中包含类路径中列出的所有jar和目录的所有包树的合并。
如果你有两个类在类路径中的两个不同的jar /目录中具有完全相同的包和名称,那么这将是一个问题,因为只有第一个可用,而你不能(AFAIK)任何关于类路径中WEB-INF / lib下的WEB-INF / classes和jar顺序的保证。
答案 1 :(得分:0)
虽然它们看起来是分层的,但Java中的包不是。包
com.student.compute
不是“在下面”
com.student
它只是另一个不同的包。
在您的Web应用程序中,如果您有两个包含完全相同包的jar文件(在您的情况下,例如两者都可以包含com.student.compute
),则类加载器将搜索所有jar以查找您的类并将“返回” “如果找到第一个。这可能是很多问题的根源,最好避免。
类加载器的工作方式取决于环境。例如,Web servlet引擎为每个Web应用程序使用不同的类加载器,这样您的jar就不会冲突,也无法看到其他Web应用程序加载的jar。