Java web工程获取当前路径

tomcat7.0
jdk1.8
在web工程中,有时我们需要获取当前项目的位置,有以下几种方式来获取:

1.纯servlet的情况:

// 结果为:E:\work\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\toolweb\
request.getServletContext().getRealPath("/");

// 下述方法也可以获取,但是已经不推荐使用
// 因为最终调用的是javax.servlet.ServletRequest中的getRealPath方法,该方法已经Deprecated
// 结果为:E:\work\workspace\AdminWeb\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\toolweb\
request.getRealPath("/");

2.Struts2的Action中

// 在Action中,
// 结果为:E:\work\workspace\AdminWeb\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\toolweb\
ActionContext ac = ActionContext.getContext();
ServletContext sc = (ServletContext) ac.get(ServletActionContext.SERVLET_CONTEXT);
String b = sc.getRealPath("/");

// 下述方法也可以获取,但是已经不推荐使用
// 因为最终调用的是javax.servlet.ServletRequest中的getRealPath方法,该方法已经Deprecated
// 结果为:E:\work\workspace\AdminWeb\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\toolweb\
String temp = ServletActionContext.getRequest().getRealPath("/");

3.利用System.getProperty()函数获取当前路径:

注意:该方法获取的路径经常不合心意。
在eclipse中tomcat启动时,拿到的是eclipse的安装目录。
在eclipse的java工程(非web工程)时,获取的当前工程的目录。

// java工程(非web工程)中,结果为:E:\work\workspace\AdminWeb\toolweb
// tomcat工程(web工程)中,结果为:E:\tools\eclipse4_4_x64
System.out.println(System.getProperty("user.dir"));

4.1.利用class的getResource(“/”)或getLocation()获取当前路径(class情况):

// 结果为:/E:/work/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/toolweb/WEB-INF/classes/com/simple/util/FileUtil.class
String path = FileUtil.class.getProtectionDomain().getCodeSource().getLocation().getPath();
System.out.println(path);

// 结果为:/E:/work/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/toolweb/WEB-INF/classes/
String retStr = FileUtil.class.getResource("/").getPath();
System.out.println(retStr);

4.2.利用class的getResource(“/”)或getLocation()获取当前路径(jar包的情况):

// windows下结果为:/E:/work/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/toolweb/WEB-INF/lib/file.jar
// Linux下结果为:/home/prop/桌面/tool/tomcat/apache-tomcat-7.0.55/webapps/toolweb/WEB-INF/lib/file.jar
String path = FileUtil.class.getProtectionDomain().getCodeSource().getLocation().getPath();
System.out.println(path);

// windows下结果为:/E:/work/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/toolweb/WEB-INF/classes/
// Linux下结果为:/home/prop/桌面/tool/tomcat/apache-tomcat-7.0.55/webapps/toolweb/WEB-INF/classes/
String retStr = FileUtil.class.getResource("/").getPath();
System.out.println(retStr);

6.客户端程序获取当前路径:

最好是使用脚本来启动客户端程序。
在脚本中将工程目录设置到环境变量中,然后启动java程序。
在java程序中,通过获取环境变量的方式,拿到当前的工程目录。
例如:
在windows bat脚本中将【当前目录】设置给环境变量【BAT_HOME】,之后在java程序中获取

rem 定位到脚本目录
set BAT_HOME=%~dp0
java A

public class A {

public static void main(String[] args) {
// TODO Auto-generated method stub
String currFolder = System.getenv("BAT_HOME");
System.out.println("当前目录为:" + currFolder);
}

}