如何在 openshift tomcat 7(JBoss EWS 2.0) 服务器上获取真实路径

How to get real path on openshift tomcat 7(JBoss EWS 2.0) server

在我的 wicket 应用程序中,我有方法在我想保存一些文件时获取路径:

public static String getFilesPath() {
    String path = WebApplication.get().getServletContext().getRealPath("/") + "/";

    System.out.println(WebApplication.get().getServletContext()
            .getRealPath(RequestCycle.get().getRequest().getContextPath())
            + " 1");
    System.out.println(WebApplication.get().getServletContext().getContextPath() + " 2");
    System.out.println(WebApplication.get().getServletContext().getRealPath("/") + " 3");


    return path;
}

当我在 localhost jetty 服务器上测试它时,它工作正常,但是当我将我的应用程序部署到 openshift tomcat 7 服务器时,我只得到 null:

null 1
 2
null 3

还有其他获取路径的方法吗?

您的 Java 应用程序在 OpenShift 上 运行 与在您的本地开发系统(内存中)上略有不同,因此 getRealPath() 方法将无法正常工作. 您应该将文件保存到您的 $OPENSHIFT_DATA_DIR (~/app-root/data) 中,您可以使用 System.getenv("OPENSHIFT_DATA_DIR") 在 java 中获取它。这也确保您的文件存储在一个永久位置,当您重新部署您的应用程序时,该位置不会是 deleted/recreated。例如,您的 ~/app-root/repo 目录会在您部署应用程序时重新创建,因此不要将上传的文件保存在那里。