在作为Linux服务运行时,从java Web应用程序中查找jetty主目录

时间:2013-11-28 16:27:37

标签: jetty

我在/srv/jetty的CentOS上安装了一个jetty 9,我在jetty中部署了一个webapp。 当我用java -jar start.jar &启动jetty然后在Web应用程序中我可以这样做:

File base = new File(".");
System.out.println("Base Dir: " + base.getAbsolutePath());

它返回了我正确的码头安装目录。

但后来我将jetty添加为linux服务,与一个名为jetty的用户一起运行,然后以service jetty start开始,然后调用上面的代码,总是会回到用户的主目录,正在运行在本例中为jetty /home/jetty/或者如果我以root身份运行/root/

如何设置jetty以找到正确的目录?我在配置文件中尝试使用jetty.home,但似乎没有任何效果。

2 个答案:

答案 0 :(得分:1)

你有几件事需要担心。

Jetty上WebApp的值得注意的路径:

  • ServletContext Real Path
  • Jetty Home
  • Jetty Base(从Jetty 9.1开始)

ServletContext Real Path

部署和启动的所有WebApp将占用工作目录或临时目录(在容器的一时兴起)。 servlet规范要求通过该webapp的ServletContext可以发现此路径。您可以通过致电ServletContext.getRealPath("/")

找到您的WebApp的位置

有关配置此work / temp目录的5种不同方法,请参阅我之前的回答: https://stackoverflow.com/a/19232771/775715

Jetty Home

默认情况下,所有Jetty Distribution实例都将具有一个名为jetty.home的系统属性,该属性将成为磁盘上Jetty Home位置的路径。这被认为是找到Jetty Binaries和Distribution配置的地方。

Jetty Base

从Jetty 9.1开始,还有一个名为jetty.base的强制系统属性,它是您的特定jetty配置实例+库+ webapps的所在地。这通常与jetty.home不同。

二进制文件配置的分离是Jetty 9.1的核心概念,采用明确的分离将使Jetty二进制文件的升级变得容易。

请参阅http://www.eclipse.org/jetty/documentation/current/startup-base-and-home.html

答案 1 :(得分:0)

我找到了简单的答案:
usermod -m -d /srv/jetty jetty
正如在互联网上的许多地方所建议的那样,我创建了一个用户码头来运行码头服务。无论我做了什么 - 即使我设置JETTY_LOGS-日志文件总是在用户主目录中结束。通过修改jetty用户主目录File(".")和日志都会结束我想要的地方