war包部署时获取绝对路径问题

当项目以war包的形式部署时,request.getServletContext().getRealPath获取不到路径 返回null,

原因如下(来自网上):

这个方法受到war 和non-war的影响,以及不同app server实现的影响,返回的结果往往不一样,在weblogic中会返回null

项目做完之后一直是直接给本地目录拷贝到tomcat的webapps下面运行的,所以没有用到war包测试的时候没测出来这个问题,后来以war包的形式放到沙箱环境就有问题了,原因是war包的项目其实没有目录结构这么一说了,还有就是不同的server实现方式也是不一样的,比如tomcat和weblogic的实现方式就不一样,所有有时会出现调用这个接口返回null的情况。

解决办法:

如果非得需要绝对路径,解决办法是借助classloader的getResource(xxx)方法,

如:

this.getClass().getClassLoader().getResource("../../test.txt“).getPath()就是获取web根目录下test.txt文件的绝对路径,因为web项目。因为getResource()这个方法基本路径是${webRoot}/WEB-INF/classes目录,所以要想取得根下的test.txt就必须附加上路径的跳转。

下面是这个方法的API:

war包部署时获取绝对路径问题_第1张图片


-------------下班后填补内容-----------------------------------------

你可能感兴趣的:(编程语言学习)