设置在Tomcat上运行的相对路径

问题描述:

我曾希望使用:classpath:/mydata/response.xml将文件复制到。设置在Tomcat上运行的相对路径

像这样.. Path dest = Paths.get(“classpath:/mydata/response.xml”);

春季启动这适用于其他地方,但不使用路径!

我想一个文件在复制这样...

      InputStream is = file.getInputStream(); 

          //Which relative Path syntax? 
          Path dest = Paths.get("./src/main/resources/mydata"+fileName); 
          Files.copy(is, dest); 

任何建议,如何设置我的文件存储在Tomcat中的相对路径?

我的目标是:

MyProject的\ SRC \主\资源\ MYDATA

这是一个很好的春季启动项目..

+0

我推荐作为_ ** strong ** _可以想象得到,您不会将数据放在您的Web应用程序目录层次结构中的任何位置。这样做会使升级到新版本的应用程序变得困难;你可以忘记为部署做一个简单的战争。 –

+0

嗯,没错。所以在我的例子Tomcat中设置服务器上的绝对路径会更好。我仍然不介意如上所述知道如何设置相对路径。 – JohnnyO

+0

如果你有'HttpServletRequest请求',你可以使用'request.getServletContext()。getRealPath(“./foo/bar.html”);'获得给定的dir /文件的实际文件系统路径。这可能与'/ usr/local/tomcat/webapps/yourapp/foo/bar.html'类似。或者,如果你将ServletContext保存在某个地方,只需要'context.getRealPath(“.....”)''。请参阅[docs for getRealPath](https://docs.oracle.com/javaee/6/api/javax/servlet/ServletContext.html#getRealPath(java.lang.String))...但是这不会回答你的问题关于与**类路径** _相关的问题。 –

使用相对CLASSPATH的路径是不是真的可以实现的,因为类路径是目录和/或jar文件的列表。如果有多个目录,你应该使用哪一个?如果有只有 jar文件,它根本没有意义。 我们的Tomcat服务器启动脚本的一个开始的类路径是这样的:

CLASSPATH=$CATALINA_HOME/bin/tomcat-juli.jar:\ 
$JAVA_HOME/lib/tools.jar:\ 
$CATALINA_HOME/bin/commons-daemon.jar:\ 
$CATALINA_HOME/bin/bootstrap.jar 

如果你想,而是存储在Web应用程序空间内的/访问文件,您可以使用ServletContext解析相对路径你的应用程序的安装目录。使用getRealPath() method但要小心,因为如果翻译无法执行,它可能会返回“null”。

在Web应用程序的文件系统结构中存储任何内容都可能导致很多问题,因为重新部署将不得不保存添加的文件或将其销毁。 我建议您创建一个可配置的数据目录,该目录的根目录可以在您的web.xml文件(或其他部署描述符)中指定,例如.properties文件或<init-param>,具体取决于哪个框架(您可能正在使用))。