0

我将首先发布我的代码:

private String path = ServerConfigProperties.getProperty("pathToDir");

public load(String path) {
    File mainDir = new File(path);
    for (File subDir : mainDir.listFiles()) {
        if (subDir.isDirectory()) {
            System.out.println(subDir.toString());
        }
    }
}

mainDir仅当我使用 eclipse 时才保存正确的子目录列表clean。例如,我可以在mainDir. 当我运行代码时,子目录都会在那里。当我使用 Windows 资源管理器添加更多目录并再次运行代码时,会打印出相同的列表,就好像我没有在主目录中添加新目录一样。如果我然后停止代码,clean在 eclipse 中运行,然后重新启动我的代码,它最终会选择新添加的目录。有没有办法mainDir在运行时维护最新的目录列表?

编辑:这是在码头服务器上运行的。不希望每次添加新目录时都必须重新启动服务器。 load(path)在服务器中的不同时间被调用,那么为什么在调用之间看不到新添加的目录load(path)呢?

4

2 回答 2

1

其中的内容WEB-INF/classes由许多不同的组件管理,一些在 Eclipse 中,一些在 Jetty 中,一些在您的构建工具中。当您在 Servlet API 中时,不建议使用标准 java File I/O 在磁盘上访问这些内容。

该目录中的内容主要通过 Classloader 访问(使用getResource()loadClass()

不要将动态内容放在该目录中。

可能发生的情况是,您是在项目树中创建它,eclipse 经历了它的构建生命周期,内容要么被编译,要么被复制到WEB-INF/classes项目的输出目录中。然后,Eclipse 要么构建战争并进行部署,要么进行就地部署。然后 Jetty 和 servlet 规范启动,它还解包(如果需要)、移动、创建工作目录和临时目录,并开始使用 Servlet 规范的要求管理应用程序。

如果您想在运行时管理动态内容,您有几个选择。

  1. 如果您希望 Jetty 能够将内容提供给 HTTP 客户端,则不要将此内容放在WEB-INF树内的任何位置(根据 Servlet 规范,整个树都被拒绝访问)。
  2. 如果您希望 Jetty 及其DefaultServletDefaultHandlerResourceHandler提供内容,则可以将其放在WEB-INF树之外的磁盘上的任何位置(您只需配置适当的 servlet 或处理程序即可使用该目录)
  3. 如果您想自己管理目录内容,甚至为 HTTP 客户端提供服务,那么您可以将其放在WEB-INF树之外的磁盘上的任何位置,因为有许多进程管理该树,并且不能保证该树不会被你无法控制的东西。

如果使用嵌入式模式 jetty,则配置 #2 的一些示例。

于 2013-07-02T19:19:01.397 回答
0

如果您编译了 JAR,这通常是一个问题。

Netbeans 将在 bin 文件夹中查找预编译对象,除非您另有说明。

我会坚持使用 Clean + Run。

于 2013-07-02T18:53:25.370 回答