0

免责声明:目前,由于缺少 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按照我的意愿在文件系统()中查找?

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

4

2 回答 2

2

Linux 中的前导斜杠表示“绝对路径”,因此您可以确定,如果您使用类似路径,/work/logs/<something>它会将其理解为绝对路径。

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

于 2014-12-11T13:07:09.477 回答
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

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

于 2014-12-11T13:15:41.083 回答