Web文件夹外的Java Servlet绝对路径[Windows& Linux]

时间:2014-12-11 13:01:37

标签: java linux tomcat servlets drive-letter

免责声明:目前,由于缺少Linux开发/测试服务器,我目前无法自行测试。因此我在这里问这个问题。我最终会有一个Linux机器,但目前仅限于使用Windows。

我正在设计一个将在Windows上运行Tomcat 7的webapp& Linux操作系统。

假设在两个系统上WAR都部署在以下位置(分别)

/opt/Tomcat/webapps/MyApp

C:/opt/Tomcat/webapps/MyApp

Webapp有一个Servlet,需要在以下位置处理来自OS文件系统的文件

/work/logs/<logfiles>

C:/work/logs/<logfiles>

在Windows上我可以指定C:/ work / logs,并且Servlet知道要获取这个绝对路径并且它工作正常。我怀疑是因为 C:一开始。我知道这是因为我测试了这个。

我真正的问题是......

在Linux上,如果没有驱动器号,如果我要求它查看/work/logs,它会尝试查看相对路径:

/opt/Tomcat/webapps/MyApp/work/logs

或者它会在我希望的文件系统(/work/logs)中查找吗?

我现在问这个问题,因为它最终会影响整体设计。

2 个答案:

答案 0 :(得分:1)

Linux中的前导斜杠意味着&#34;绝对路径&#34;,因此您可以确定如果使用/work/logs/<something>这样的路径,它会将其理解为绝对路径。

BTW如果你在Windows中使用相同的路径它将工作并使用当前磁盘,即如果tomcat的工作目录在C:上,它将使用C:驱动器,但是如果tomcat是在D:上运行此驱动器将被使用。

答案 1 :(得分:1)

我可以建议使用CATALINA_HOME环境变量来查找放置配置的文件夹。对于我的项目,我有以下结构:

$CATALINA_HOME/appconfig/   <-- config
$CATALINA_HOME/webapps/somewar.war     <-- your webapps  

在appconfig中,我将放置一些somewar.properties,它作为该服务器的配置。 (我还放置log4j.properties,以及特定于您运行的服务器实例的特殊证书/其他内容,但我尽量将其保持在最低限度) 由于将始终为您的项目设置CATALINA_HOME,因此可以重复使用。

在somewar.properties中我会列出

work.path=/work/logs

使用/ work / logs可以在Linux和Windows上同时使用@AlexR提及(在他的答案中更多)但你可能会遇到麻烦,因为你需要root访问才能创建/工作文件夹。这取决于谁在管理服务器以及它们有多严格。 我更喜欢配置解​​决方案,所以如果你最终在一台不能让你使用某个位置的机器上工作,你可以切换。当然,你需要被允许在CATALINA_HOME中写字;)