一般在系统中(使用struts框架)如果要获取web应用程序的根目录都是通过
ServletActionContext.getServletContext().getRealPath("");
来进行获取,但servletActionContext是struts2中的过滤器绑定的ThreadLocal变量,必须要经过FilterDispatcher才能够使用 否则获取参数可能会为空。
之前在系统系统中需要在定时任务中获取系统根目录再通过上面的方式就会出现异常,所以封装一个工具方法。工具方法主要是用过ProtectionDomain,CodeSource,URL等类来获取当前class存在的路径然后通过路径找到对应的web目录。
public static String getWebRootPath() //Util为当前工具类名
{
ProtectionDomain pd = Util.class.getProtectionDomain();
if (pd == null)
{
return null;
}
CodeSource cs = pd.getCodeSource();
if (cs == null)
{
return null;
}
URL url = cs.getLocation();
if (url == null)
{
return null;
}
String strUrl = null;
if(url.getPath().endsWith("jar")){
strUrl = url.getPath().substring(0, url.getPath().indexOf("lib"));
}else{
strUrl = url.getPath().substring(0, url.getPath().indexOf("classes"));
}
strUrl = url.getPath().substring(1, url.getPath().indexOf("WEB-INF"));
return strUrl;
}