如何在 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 目录会在您部署应用程序时重新创建,因此不要将上传的文件保存在那里。
在我的 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 目录会在您部署应用程序时重新创建,因此不要将上传的文件保存在那里。