Java 使用Tomcat webapp访问存储在服务器上的文件

Java 使用Tomcat webapp访问存储在服务器上的文件,java,eclipse,gwt,tomcat,Java,Eclipse,Gwt,Tomcat,我目前有一个GWT网络应用程序,运行在带有Tomcat6的Ubuntu11.04服务器上。应用程序需要能够读取和写入服务器上特定文件夹中的文件。当通过Eclipse以开发模式运行应用程序时(我想是使用内置的jetty实例),它可以正常工作。但是,当我将应用程序部署到Tomcat服务器时,应用程序无法读取/写入文件 指向服务器上正确文件夹的正确路径结构是什么?例如,我如何告诉应用程序访问/home/username/project文件夹 我是否需要为Tomcat设置一个允许访问文件的配置 以下是我

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

指向服务器上正确文件夹的正确路径结构是什么?例如,我如何告诉应用程序访问/home/username/project文件夹

我是否需要为Tomcat设置一个允许访问文件的配置

以下是我当前检索文件的方式(其中字符串file=“./projects/filename”):


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

请确保您想要编辑的目录由您用来启动Apache Tomcat的同一用户所有(我假设是通过catalina.sh),并且在这些目录上设置了适当的权限

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

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

这样做的原因是,这些文件与项目一起打包,因此在部署项目时,您不必担心将要使用的文件复制到web服务器,而不必与部署分开


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

您是否正在尝试写入运行Tomcat实例的同一用户的主文件夹?这通常是最好的方法。运行tomcat的用户是否对tomcat尝试读取/写入的路径具有写/写访问权限?我通过apt get安装了tomcat,因此用户是默认的(root?)用户。我现在将文件夹权限设置为777,只是为了让它工作。不幸的是,它仍然不起作用@Dave-不是应用程序引擎,只是家庭服务器now@Joni,请参阅我的回答:将您试图访问的文件放入war目录,然后使用相对路径加载它们。tomcat在服务器引导时自动启动。自从通过apt get安装tomcat以来,我没有更改任何设置。我怎么知道是哪个用户在运行它呢?我按照你的建议做了,并将文件放在war目录的一个文件夹中。这在eclipse中运行时效果很好,但在服务器上部署war后,我会得到相同的结果。请参阅我上面编辑的问题,其中现在包含一些示例代码。您是如何部署的?你要把war放到web服务器上吗?我正在使用服务器的tomcat管理器来上传和部署war,我从来没有使用过它-但是打开war文件,看看这些文件是否在你认为的地方。可能是你正在建造的东西。。。
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;
}