Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java包结构中的澄清_Java_Jakarta Ee - Fatal编程技术网

Java包结构中的澄清

Java包结构中的澄清,java,jakarta-ee,Java,Jakarta Ee,我必须在我的web应用程序的web.xml中添加一个过滤器,它使用jar文件中的目录结构,我将把jar文件添加到我的web应用程序的lib目录中 <filter> <filter-name>monitor</filter-name> <filter-class>com.student.compute</filter-class> </filter>

我必须在我的web应用程序的web.xml中添加一个过滤器,它使用jar文件中的目录结构,我将把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> 

班长
com.student.compute
班长
/*
这里,过滤器使用jar文件中com.student包中的“compute”类。我已经扩展了jar文件,并确认了这个结构是否存在

现在在我的类目录中,我也有一个com目录,其中包含许多特定于我的应用程序的类

现在,当我尝试访问web应用程序中的内容时,jar文件中的com和classes目录中的com不会发生冲突


请澄清。

不,它们不会冲突。如果这是一个问题,您不能同时使用Apache中的几个库,因为它们都将它们的类放在org.Apache的某个子包下

您可以将类路径中所有类的包树看作一棵巨树,其中包含类路径中列出的所有jar和目录的所有包树的合并


如果在类路径的两个不同jar/目录中有两个具有完全相同的包和名称的类,那么这将是一个问题,因为只有第一个可用,而您不能(AFAIK)对类路径中WEB-INF/lib下WEB-INF/classes和JAR的顺序有任何保证。

尽管它们看起来是分层的,但Java中的包不是。包裹

com.student.compute

不是“在下面”

com.student

这只是另一个不同的包

在web应用程序中,如果有两个jar文件包含完全相同的包(例如,在您的示例中,两个jar文件都可能包含
com.student.compute
),则类加载器将搜索所有jar以查找您的类,如果找到,将“返回”第一个jar。这可能是许多问题的根源,最好避免


类加载器的具体工作方式取决于环境。例如,web servlet引擎为每个web应用程序使用不同的类加载器,这样您的JAR就不会发生冲突,您就看不到其他web应用程序加载的JAR。

谢谢。我怎样才能看到类路径中列出的所有JAR和目录的包树呢?除非你自己合并所有JAR,否则你不能。但你为什么要看这个?唯一重要的是,如果一个类在其中一个jar中,那么它是可用的,不管其他jar中存在什么类。