Code Bye

打成WAR包后怎么取得该项目的绝对路径?

 

我用weblogic 10.3.4.
不打WAR包进行部署。正常。
我程序中取得该项目的绝对路径程序为:
String realRootPath = ServletActionContext.getServletContext().getRealPath(“/”);

但我打成WAR包部署后,调试程序,结果:
上面程序取得的变量为null.

打成WAR包后怎么取得该项目的绝对路径?

10分

#1

String path = System.getProperty(“java.class.path”);
String separetor = System.getProperty(“file.separator”);
String absolutePath = (new File(path)).getAbsolutePath();
10分

#2

if (absolutePath.indexOf(“;”) >= 0) {
absolutePath = absolutePath.split(“;”)[0];
}
int i, j;

for (i = 0; (j = absolutePath.indexOf(separetor, i)) >= 0; i = j + 1)
;
ROOT_PATH = absolutePath.substring(0, i);

10分

#3

这个是tomcat和weblogic不同的地方了。
weblogic自己不会解压war包出来,weblogic的war包部署时,需要自己添加一个进行war解压的class文件,然后配置在web.xml里面,否则在war包里面拿不到路径信息。我之前搞weblogic部署时都是部署文件夹,都不部署war包了。
70分

#4

把代码
getServletContext().getRealPath("/")

  修改成 

getServletContext().getResource("/")

URL url = request.getSession().getServletContext().getResource(“/”);
String path = request.getSession().getServletContext().getRealPath(“/”)
getRealPath()获得的是绝对路径,getResource()获得的是相对路径,对于开发人员来说都是使用相对路径,因为使用的是绝对路径一旦你换了服务器或者系统,那便会出现路径或者类加载的错误,典型的如果你在windows下可能有C,D盘之分,但是在linux系统下便没有盘符之分了,所以建议使用getResource()
如果你使用的是getResource()你在用myeclipse或者eclipse时把项目压缩成war包后对你的部署工作不会存在影响,但是如果是用的绝对路径,一定会有影响! 
参考 tomcat迁移weblogic路径问题 很久不搞WebLogic了,希望这个对楼主有帮助

#5

我试了,都不行,还有什么办法

#6

xxxxxxxAction.class.getResource(“/”).getPath()
试试这个行不行action就是随便一个class文件

#7

回复5楼:

楼主试了在war里面取路径都不行吗?如果都不行,那就写一个servlet,配置在web.xml里面,让项目加载的时候先去把war解压出来,这样获取路径时就可以在文件夹里面获取了。

#8

Thread.currentThread().getContextClassLoader().getResource(aResource).toString();
获取URL格式的路径   再截取

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明打成WAR包后怎么取得该项目的绝对路径?