如何通过Java代码获取tomcat服务器的绝对路径

时间:2022-09-13 18:09:43

有时候我们可能会有这样的需求:获取tomcat的绝对路径,以便于进行一些其他的操作,看过很多老哥的方式大多都类似于这种:

①:

Test.class.getResource("/") 

②:

System.getProperty("user.dir")

上述两种方式的呢我先说第一种:第一种是获取Classpath的绝对路径。一般情况下是也可以间接获取到tomcat服务器的路径,但是有一种情况例外,当我们改变tomcat下面的配置文件server.xml的appBase地址时,情况就会发生变化。默认情况下为<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">这个属性表示当我们启动Tomcat时加载tomcat下面的工程项目。这个我们可以自定义,比如我们改成appBase="D:\webapps",这样当启动服务器时便会加载我们定义目录下的工程项目。所以如果自定义了appBase属性值的Test.class.getResource("/") 虽然还是可以定位到classpath的路径,但是已经很tomcat的路径没有什么关联了。

第二种方式呢,表示获取用户的当前工作目录,web项目中默认情况获取的值为/tomcat_home/bin/,我在windows和centos中测试的都没有什么问题,但是在Redhat中测试的结果却不是这样的,尤其是在我改了appBase属性之后。偏偏我的项目又需要在Redhat操作系统中跑,所以这一种方式只有放弃了。


最后呢,经过我的苦苦寻找,终于让找到一种比较合适的方式:

System.getProperty("catalina.home")

能够帮你准确的定位到tomcat绝对路径。注意在在windows和*inux中路径分隔符不一样,在window是\,在*inux中是/,千万需要注意这点。网络上许多老哥说最好不要用第二种方式,不然很可能会出现一些致命的错误,我们这些后车之师就不要再次犯错了.


希望这篇文章能够帮助到大家,谢谢~