Java - 获取服务器绝对路径

问题描述:

如何获取我的计算机中服务器位置的绝对路径?Java - 获取服务器绝对路径

假设我使用GlassFish服务器然后我需要得到如下GlassFish的文档根目录位置的绝对路径:

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

在运行时,我需要使用Java IO包这样的位置创建文件:

C:\glassfish3\glassfish\domains\domain1\docroot\myfile.txt 
+5

看['ServletContext'](http://docs.oracle.com/javaee/5/api/javax/servlet/ServletContext.html),用于像'getRealPath(路径)'&'getContextPath方法()'。 – 2012-04-18 05:54:51

+0

request.getRealPath(“”)或request.getServletContext()。getRealPath(“”)为我提供了C:\ Users \ Administrator \ Documents \ NetBeansProjects \ ServletExamples \ build \ web – 2012-04-18 06:02:07

+1

@ user966709可能是因为从NetBeans已经配置了热部署..但是如果你真的创建了一个.war文件并部署它,你可能会得到docroot的路径 – 2013-05-03 12:18:05

对于你不必去完整路径,因为

当你创建文件比默认情况下它会在ROOT产生O-你服务器

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

希望这会帮助你。

+0

目前我正在使用硬编码路径C:\ glassfish3 \ glassfish \ domains \ domain1 \ docroot来编写文件该位置,但需要动态获取,因为如果其他人将使用应用程序,则可能是他的玻璃鱼服务器存在于d:\目录中,并且在这种情况下,他需要手动更改路径。 – 2012-04-18 05:58:02

+0

用java编写代码 File file = new File(“/ domains/domain1/docroot/myfile.txt”); 这将在C:\ glassfish3 \ glassfish \ domains \ domain1 \ docroot \ myfile.txt创建文件,即使您的glassfish在c:\或d:\也无所谓。 – 2012-04-18 06:02:29

我有一个类似的问题,结束了使用

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

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

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

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

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

如果使用的GlassFish启动GlassFish的,即使用asadmin start-domain|start-instance然后我们提供以下的铁一般的保证:

的JVM的当前工作目录是绝对,积极保证是该域的config目录或服务器。在默认的情况下,这将是:

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

如果你想要写的东西(默认值)文档根,你可以这样做:

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

这是保证始终另一种选择即使您直接使用java启动服务器(例如java -jar glassfish.jar),也是在每种情况下都可以使用系统属性的值,如下所示:

File f = new File(System.getProperty("com.sun.aas.instanceRoot") + "/docroot/yourfile"); 

我不知道这是不是最好的方式,但它为我工作:)

String path = new File("").getAbsolutePath() + File.separator + "docroot"; 
+1

这会获取启动应用程序服务器的位置的路径,通常是startup.sh/startup.bat所在的位置。此脚本可能不一定位于服务器文件夹内。 – Hoffmann 2013-03-04 12:59:14

你可以尝试以下操作:

System.getProperty("catalina.base"); 

,您可以通过下面看发现其他性质在调试模式下变量。

Properties properties = System.getProperties(); 
+0

特定于特定的Web服务器 – 2013-05-03 12:08:41

+0

,但正如我所看到的,问题的提问者使用glassfish。所以这对他/她来说是有用的。 – 2013-05-10 06:55:20

+0

我试图做到这一点,但很遗憾,我没有找到任何绝对路径来揭示我的服务器的根。你知道如何确定它吗? (我使用了第二个代码并通过日志打印出来)。 – 2013-12-05 14:46:56