【问题标题】:Java Servlet absolute paths outside webfolder [ Windows & Linux ]Web 文件夹外的 Java Servlet 绝对路径 [Windows 和 Linux]
【发布时间】:2014-12-11 13:01:36
【问题描述】:

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

我正在设计一个将在 Windows 和 Linux 上的 Tomcat 7 中运行的 web 应用程序。

假设在两个系统上,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) 中查找?

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

【问题讨论】:

    标签: java linux tomcat servlets drive-letter


    【解决方案1】:

    Linux 中前导斜杠的意思是“绝对路径”,所以你可以确定如果你使用像/work/logs/&lt;something&gt; 这样的路径,它会理解为绝对路径。

    顺便说一句,如果您在 Windows 中使用相同的路径,它将工作并使用当前磁盘,即如果 tomcat 的工作目录在C: 上,它将使用C: 驱动器,但是如果 tomcat 在D: 上运行,则此驱动器将使用。

    【讨论】:

    • 谢谢亚历克斯,这实际上是一个比我希望的更好的答案。我现在要在 Windows 上尝试 /work/log 路径,这最终意味着更多的可移植性和更少的配置:)
    • 刚刚在 Windows Server 上对此进行了测试,您是否相信 /work/logs/20141211.log 找到了这个 C:/work/logs/20141211.log - 谢谢 Alex
    【解决方案2】:

    我可以推荐使用 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
    

    正如@AlexR 提到的那样,使用 /work/logs 可以在 linux 和 windows 上工作(在他的更重要的回答中),但是你可能会遇到麻烦,因为在 linux 上你需要 root 访问权限才能创建 /工作文件夹。这取决于谁在管理服务器以及他们的严格程度。 我更喜欢配置解​​决方案,因此如果您最终在不允许您使用某个位置的机器上工作,您可以切换。当然,您确实需要被允许在 CATALINA_HOME 中写入;)

    【讨论】:

    • 谢谢乔,我有一个类似于你建议的配置文件。我提到的路径受“我们”的控制,但如果它们应该更改,肯定会通过属性文件引用。没有什么是硬编码的(无论如何都可能)
    猜你喜欢
    • 2017-01-17
    • 2010-10-08
    • 1970-01-01
    • 2011-03-13
    • 2013-12-20
    • 1970-01-01
    • 1970-01-01
    • 2016-08-08
    • 1970-01-01
    相关资源
    最近更新 更多