当项目以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:
-------------下班后填补内容-----------------------------------------