一、獲得都是當前運行文件在服務器上的絕對路徑
在servlet里用:
this.getServletContext().getRealPath();
在struts用:
this.getServlet().getServletContext().getRealPath();
在Action里用:
ServletActionContext.getRequest().getRealPath();
以上三個獲得都是當前運行文件在服務器上的絕對路徑
其實:
request.getRealPath("url"); // 虛擬目錄映射為實際目錄
request.getRealPath() 這個方法已經不推薦使用了,代替方法是:
request.getSession().getServletContext().getRealPath();
二、request獲取各種路徑總結
request.getRealPath("url"); // 虛擬目錄映射為實際目錄
request.getRealPath("./"); // 網頁所在的目錄
request.getRealPath("../"); // 網頁所在目錄的上一層目錄
request.getContextPath(); // 應用的web目錄的名稱
如http://localhost:7001/bookStore/
/bookStore/ => [contextPath] (request.getContextPath())
獲取Web項目的全路徑
String strDirPath =request.getSession().getServletContext().getRealPath("/");
以工程名為news為例: http://localhost:8080/news/main/list.jsp
(1) 得到包含工程名的當前頁面全路徑:request.getRequestURI()
結果:/news/main/list.jsp
(2) 得到工程名:request.getContextPath()
結果:/news
(3) 得到當前頁面所在目錄下全名稱:request.getServletPath()
結果:如果頁面在jsp目錄下 /main/list.jsp
(4) 得到IE地址欄地址:request.getRequestURL()
結果:http://localhost:8080/news/main/list.jsp
(5) 得到相對地址:request.getRequestURI()
結果:/news/main/list.jsp
(6) 得到頁面所在服務器的全路徑:application.getRealPath("頁面.jsp")
結果:D:\resin\webapps\news\main\list.jsp
(7) 得到頁面所在服務器的絕對路徑:absPath=new java.io.File(application.getRealPath(request.getRequestURI())).getParent();
結果:D:\resin\webapps\news
三、在類中取得路徑
(1) 類的絕對路徑:Class.class.getClass().getResource("/").getPath()
結果:/D:/TEST/WebRoot/WEB-INF/classes/pack/
例如:
String path=this.getClass().getResource("/").getPath();//得到d:/tomcat/webapps/工程名WEB-INF/classes/路徑
path=path.substring(1, path.indexOf("WEB-INF/classes"));//從路徑字符串中取出工程路徑
(2) 得到工程的路徑:System.getProperty("user.dir")
結果:D:\TEST
四、在Servlet中取得路徑
(1) 得到工程目錄:request.getSession().getServletContext().getRealPath("") 參數可具體到包名。
結果:E:\Tomcat\webapps\news
import java.io.File; public class Test { public static void main(String[] args) throws Exception { System.out.println(Thread.currentThread().getContextClassLoader().getResource("")); System.out.println(Test.class.getClassLoader().getResource("")); System.out.println(ClassLoader.getSystemResource("")); System.out.println(Test.class.getResource("")); System.out.println(Test.class.getResource("/")); //Class文件所在路徑
System.out.println(new File("/").getAbsolutePath()); System.out.println(System.getProperty("user.dir")); } }
五、系統路徑說明:
System.getProperty("user.dir")
如果是.bat或者.sh文件的話,那么該語句輸出的時候.bat或者.sh所在的文件路徑;
如果是weblogic服務器且由類輸出的話,該語句輸出的路徑是./startWebLogic.sh文件所在的路徑
String osName = System.getProperties().getProperty("os.name"); if(osName.equals("Linux")){ System.setProperty("CPATH",System.getProperty("user.dir")+"/cssconfig.properties"); }else{ System.setProperty("CPATH",System.getProperty("user.dir")+"\\cssconfig.properties"); }
根據操作系統設定不同路徑。