日期:2014-05-19  浏览次数:20636 次

获取j2ee项目服务器根目录
   Jsp 能使用HttpServletRequest对象getRealPath("/") 方法,或者getServletContext().getRealPath("/"); 屡试不爽,可是这次却不行! 看了servlet的实现后,问题逐步得到解决。

         做上传或文件读取的时候,常常被取一些文件的相对路径或者绝对路径所搞昏迷了,在本地调试完全没问题,运行很良好,可发布到测试环境就出现了差池,只取得了相对路径。
发布都是打包成*.war文件的,在tomcat下,一般应用程序是不打包的,所以可以实现用上面方法取绝对路径,可是在weblogic下是打包成*.war,就无法实现保存文件在特定的服务器目录了。
     
解决方案如下:
一、存储到数据库中,访问用一个servlet实现。比较难受点。
二、如果你用的是weblogic 7以上,并且自己可以控制服务器,那么你可以不用打包成war,直接以普通目录形式发布就可以了。
三、自己写个读取项目根目录的方法,这样无论怎么部署,有了项目的根目录,我就能轻而易举的定位到我的资源了。
对于自己的特殊要求,我当然选择方案三了。问题解决!

以下是源代码:

public static String homePath(Object obj, String className) {
java.net.URL url = obj.getClass().getResource(className);
String absolutePath = url.getPath();//获取全路径信息
String urlRoot = "";//路径临时处理缓存
int pos = absolutePath.indexOf("WEB-INF");//判断根目录
if (pos != -1)
urlRoot = absolutePath.substring(0, pos);
else
urlRoot = absolutePath.substring(0, 3);//无相关文件去盘符下

if (urlRoot.substring(urlRoot.length() - 1, urlRoot.length()).equals(
System.getProperty("file.separator"))
|| urlRoot.substring(urlRoot.length() - 1, urlRoot.length())
.equals("/")) {
urlRoot = urlRoot.substring(0, urlRoot.length() - 1);//除去最后的分隔符
}
return urlRoot.substring(1, urlRoot.length());// 除去路径最开头的' /'