5

如何在我的机器中获取服务器位置的绝对路径?

假设我使用的是 glassfish 服务器,那么我需要获取 glassfish docroot 位置的绝对路径,如下所示:

C:\glassfish3\glassfish\domains\domain1\docroot

在运行时,我需要使用 java io 包在该位置创建文件,例如:

C:\glassfish3\glassfish\domains\domain1\docroot\myfile.txt
4

6 回答 6

5

如果您使用 GlassFish 启动 GlassFish,即使用,asadmin start-domain|start-instance那么我们提供以下铁定保证:

JVM 的当前工作目录绝对肯定是域或服务器的配置目录。在默认情况下,这将是:

c:/glassfish3/glassfish/domains/domain1/config

如果你想写一些东西到(默认的)docroot,你可以这样做:

File f = new File("../docroot/yourfile");

即使您直接使用 java 启动服务器(例如java -jar glassfish.jar),也可以保证在每种情况下始终有效的另一个选项是使用 System Property 的值,如下所示:

File f = new File(System.getProperty("com.sun.aas.instanceRoot") + "/docroot/yourfile");
于 2012-04-19T21:32:48.320 回答
1

我有一个类似的问题,最终使用

path = getClass().getProtectionDomain().getCodeSource().getLocation()

因为我需要静态函数的路径。这指向 WEB-INF/classes 目录。有了这个,你可以指向类似的东西path.subString(0,path.indexOf("WEB-INF"))

我遇到的一个问题:从 Eclipse 运行测试时,它指向项目的“构建”目录。

于 2012-04-18T06:20:20.183 回答
1

您可以尝试以下操作:

System.getProperty("catalina.base");

您可以通过在调试模式下查看以下变量来找到其他属性。

Properties properties = System.getProperties();
于 2013-05-03T11:50:11.627 回答
1

我不知道这是否是最好的方法,但它对我有用:)

String path = new File("").getAbsolutePath() + File.separator + "docroot";
于 2012-05-03T14:57:14.863 回答
0

这是一个非常糟糕的主意。如果您在 WAR 或 EAR 文件中运行,则 docroot 将不在可写文件系统上。假设是这种情况可能会导致以后头痛。

使用不同的方法(例如 servlet 初始化参数)来指定可写文件系统位置。

于 2012-04-18T06:39:16.200 回答
-1

为此,您无需走完整的道路,因为

当您创建文件时,默认情况下它将在ROOT您的服务器上创建

这是C:\glassfish3\glassfish\在这里。

希望这会帮助你。

于 2012-04-18T05:51:21.397 回答