【问题标题】:How is user.dir configured for Tomcat servlets?如何为 Tomcat servlet 配置 user.dir?
【发布时间】:2015-01-07 15:20:11
【问题描述】:

在我的 Tomcat servlet 中,我使用了一个 jar 库来查找 System.getProperty("user.dir") 中的某些 .properties 文件。

问题是当我在不同的服务器上部署 servlet 时,"user.dir" 是不同的。我希望他们是一样的。有没有办法配置这个目录,让每台服务器都一样?

我也跑了catalina.sh version,输出中没有出现"user.dir"目录(包括CATALINA_BASECATALINA_HOME),很奇怪。这发生在某些服务器上。在其他服务器上,"user.dir" 匹配 CATALINA_BASE

【问题讨论】:

  • 如果我是你,我会就这个设计错误联系库维护者并让他们修复它。他们最好从类路径中读取它,而不是在 Java 的上下文中更加灵活。

标签: java tomcat servlets


【解决方案1】:

,你可以将该属性设置手动通过修改̶̶c̶a̶t̶a̶l̶i̶n̶a̶.̶s̶h̶̶并将其设置̶t̶h̶e̶r̶e̶.̶但是,这种方法将是非常̶c̶o̶m̶b̶e̶r̶s̶o̶m̶e̶因为你必须设置值的手动从此文件夹中的每个TOMCAT̶i̶n̶s̶t̶a̶l̶l̶a̶t̶i̶o̶n̶.̶ P >

这里的段落是错误的。这是因为我天真地忘记了"user.dir" 属性是the working folder where Java was executed(示例显示为here)和you cannot change it not even with -D property when executing the JVM。如果要更改"user.dir" 的值,则必须更改Java 执行的文件夹以启动tomcat,这可能容易或困难,具体取决于您的技能,我不推荐这种方法作为解决方案。

A̶n̶o̶t̶h̶e̶r̶o̶p̶t̶i̶o̶n̶ 最好的选择是在 contextInitialized 方法中定义一个 ServletContextListener 并在那里设置一个新属性(以及作为特定文件夹的值)。然后,在您的任何 servlet 中,您应该改为恢复此属性。

【讨论】:

  • 事实证明,对于我的某些服务器,user.dirCATALINA_BASE 不匹配,我希望它们相同。我需要修改catalina.sh吗?
  • 酷!您是否对user.dirCATALINA_BASE 不同的原因有任何见解?
猜你喜欢
  • 1970-01-01
  • 2011-08-05
  • 1970-01-01
  • 2012-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-11
  • 1970-01-01
相关资源
最近更新 更多