【问题标题】:Access files stored on server with Tomcat webapp使用 Tomcat webapp 访问存储在服务器上的文件
【发布时间】:2012-02-01 21:06:41
【问题描述】:

我目前有一个 GWT webapp 运行在带有 Tomcat6 的 Ubuntu 11.04 服务器上。该应用程序需要能够从服务器上的特定文件夹读取和写入文件。通过 Eclipse 在开发模式下运行应用程序时(我想使用内置的码头实例),它工作正常。但是,当我将应用程序部署到 Tomcat 服务器时,应用程序无法读取/写入文件。

指向服务器上正确文件夹的正确路径结构是什么? IE。如何让应用访问 /home/username/project 文件夹?

我需要为 Tomcat 进行配置设置以允许访问文件吗?

这是我当前检索文件的方式(其中 String file = "./projects/filename"):

public Project getProjectFromFile(String file) {
    Project p = null;
    try {       
        InputStream fis = getResourceAsStream(file);
            FileInputStream fis = new FileInputStream(file);
            ObjectInputStream ois = new ObjectInputStream(fis);

            p = (Project) ois.readObject();

            ois.close();
    } catch (FileNotFoundException e) {
        System.err.println("getProjectFromFile FileNotFoundException: "
                + e.getMessage());          
    } catch (IOException e) {           
        System.err.println("getProjectFromFile IOException: " + e.getMessage());        
    } catch (ClassNotFoundException e) {            
        System.err.println("getProjectFromFile ClassNotFoundException: " 
                + e.getMessage());          
    } catch (Exception e) {         
        System.err.println("getProjectFromFile Exception: " + e.getMessage());
        e.printStackTrace();
    }
return p;
}

我也愿意接受任何建议。谢谢

【问题讨论】:

  • 您是否尝试写入运行 Tomcat 实例的同一用户的主文件夹?这通常是最好的方法。
  • 运行 tomcat 的用户是否对 tomcat 尝试读取/写入的路径具有写入/写入权限?
  • 我通过 apt-get 安装了 tomcat,所以用户是默认用户(root?)我现在将文件夹权限设置为 777,只是为了让它工作。不幸的是,它仍然不起作用。 @Dave - 不是应用引擎,现在只是家庭服务器
  • @Joni,请参阅我关于将您尝试访问的文件放入您的 war 目录然后使用相对路径加载它们的答案。

标签: java eclipse gwt tomcat


【解决方案1】:

请确保您希望可编辑的目录归您用于启动 Apache-Tomcat 的同一用户所有(我假设是通过 catalina.sh),并且在这些目录上设置了适当的权限。

【讨论】:

  • tomcat 在服务器启动时自动启动。自从通过 apt-get 安装它后,我没有更改任何 tomcat 设置。我怎么知道是哪个用户在运行它?
【解决方案2】:

首先,当您使用 servlet 时,最好使用相对路径并将您尝试加载的任何文件(xml、png、html、css 等)放在您的 war 目录中的某个位置。

完成此操作后,您应该能够使用文件的相对路径。例如,要在代码中加载/home/path/to/your/eclipse/project/war/html/view/a_random_page.html,您只需在尝试加载时使用./html/view/a_random_page.html 作为文件路径。

这样做的原因是因为这些文件是与你的项目打包在一起的,所以当你部署它时,你也不必担心将要使用的文件复制到与部署分开的网络服务器上。

以这种方式做事有助于更轻松地部署以及将您的安装移动到不同的目录/Web 服务器。如果您必须让不止一个人与您一起从事该项目,它也会变得更容易。按照您目前的方式进行操作,如果有人开始在项目上帮助您,那么您将不得不更改所有绝对路径以指向各自机器上的正确文件。

【讨论】:

  • 我按照你的建议做了,并将文件放在war目录中的文件夹中。这在 eclipse 中运行时工作正常,但是一旦在服务器上部署战争,我会得到相同的结果。
  • 请看我上面编辑的问题,现在包含一些示例代码。
  • 你是如何部署的?你要把战争放到网络服务器上吗?
  • 我正在使用服务器的tomcat-manager上传部署war
  • 我从来没有使用过——但是打开war文件,看看文件是否在你认为的位置。可能是您正在构建的方式...
猜你喜欢
  • 1970-01-01
  • 2014-06-10
  • 2012-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-07
  • 1970-01-01
  • 2016-03-08
相关资源
最近更新 更多