絕對路徑: 也可稱完整路徑,是指向文件系統中某個固定位置的路徑,不會因當前的工做目錄而產生變化。爲作到這點,它必須包括根目錄。html
舉例:
test.txt文件的絕對路徑爲:D:\documents\develop\test.txt
https://www.oracle.com/index.html表明了一個URL絕對路徑
複製代碼
相對路徑: 則是以指定的工做目錄做爲基點,避開提供完整的絕對路徑。文件名稱就能夠被視爲指定工做目錄爲基點的一個相對路徑(雖然通常不將其稱之爲路徑)。java
Java中加載文件時使用的相對路徑,到底是相對於什麼路徑呢?
據java doc上說明,Java使用的相對路徑,就是相對於「當前用戶目錄」,即「Java虛擬機的調用目錄」,更白話就是:咱們在哪裏調用了JVM的路徑。
舉例:
D盤根目錄下有一java源文件Test.java,如:D:\Test.java
該Test.java文件不含package信息,在命令行窗口編譯此文件(執行命令:javac Test.java),則會在D盤自動生成Test.class文件。
而後在命令行窗口執行該程序(執行命令:java Test),此時已啓動一個JVM,這個JVM是在D盤根目錄下被啓動的,則JVM所加載程序中File類的相對路徑就是相對D盤根目錄的,即 D:\
「當前用戶目錄」,即Java虛擬機的調用目錄,也是:D:\
System.getProperty("user.dir")中系統變量"user.dir"存放的也是 D:\
說明:把Test.class移動到不一樣路徑下,執行java Test命令啓動JVM,發現「當前用戶目錄」是不斷變化的,始終和在哪啓動JVM的路徑是一致的。
複製代碼
來自維基百科:zh.wikipedia.org/wiki/路徑_(計算…web
相對於classpath的相對路徑tomcat
classpath: 就是項目中存放.class文件的路徑。bash
舉例:
Eclipse項目中classpath爲:D:\eclipse32\workspace\java-demo\bin,相對於classpath的相對路徑,就是相對於D:\eclipse32\workspace\java-demo\bin的相對路徑。
(URL形式表示爲:file:/D:/eclipse32/workspace/java-demo/bin/)
IntelliJ IDEA項目中classpath爲:D:\ideaProjectDemo\java-demo\target\classes,相對於classpath的相對路徑,就是相對D:\ideaProjectDemo\java-demo\target\classes的相對路徑。
(URL形式表示爲:file:/D:/ideaProjectDemo/java-demo/target/classes/)
複製代碼
相對於當前用戶目錄的相對路徑服務器
當前用戶目錄:即Java虛擬機的調用目錄,即System.getProperty("user.dir")
返回的路徑。oracle
對於通常項目,就是項目的根目錄,例如:java-demo項目的項目根目錄爲:D:\ideaProjectDemo\java-demo。app
對於JavaEE服務器,多是服務器的某個路徑,這個沒有統一的規範,例如:在Tomcat中運行Web應用,那「當前用戶目錄」是:%Tomcat_Home%/bin(即
System.gerProperty("user.dir")
輸出%Tomcat_Home%/bin),即D:\Program Files\tomcat-5.0.28\bin,由此能夠看出Tomcat服務器是在bin目錄下啓動JVM的(實際上是在bin目錄下的「catalina.bat」文件中啓動JVM的)。eclipse
說明:webapp
默認狀況下,java.io包中的類老是根據「當前用戶目錄」來分析相對路徑名,此目錄由系統屬性user.dir指定,一般是Java虛擬機的調用目錄。
也就是說:在使用java.io包中的類時,最好不要使用相對路徑。(在J2EE程序中會出問題,這個路徑在不一樣的服務器中都是不一樣的)
因此,不要使用相對於「當前用戶目錄」的相對路徑。
服務器端相對地址
服務器端的相對地址指的是相對於你的web應用的地址,這個地址是在服務器端解析的。也就是說在jsp和servlet中的相對地址是相對於你的web應用,即相對於http://192.168.0.1/webapp/
的。
舉例:
1.servlet中:
request.getRequestDispatcher("/user/index.jsp"),這個"/user/index.jsp"是相對於當前web應用的webapp目錄的,
其絕對地址就是:http://192.168.0.1/webapp/user/index.jsp
2.jsp中:
<%response.sendRedirect("/user/a.jsp");%>
其絕對地址是:http://192.168.0.1/webapp/user/a.jsp
複製代碼
客戶端相對地址
全部的HTML頁面中的相對地址都是相對於服務器根目錄(http://192.168.0.1/
)的,而不是相對於服務器根目錄下Web應用目錄(http://192.168.0.1/webapp/
)的。
舉例:
HTML中form表單的action屬性的地址是相對於服務器根目錄(http://192.168.0.1)的,
因此提交到index.jsp爲:action="/webapp/user/index.jsp"或action="<%=request.getContextPath()%>/user/a.jsp";
說明:
通常狀況下,在JSP/HTML頁面等引用的CSS,JavaScript.Action等屬性前面最好都加上<%=request.getContextPath()%>,以確保所引用的文件都屬於Web應用中的目錄。
注意:
應該儘可能避免使用".","./","../../"等相似的相對該文件位置的相對路徑,不然當文件移動時,很容易出現問題。
"./"表明當前目錄
"../"表明上級目錄
"../../"表明上級目錄的上級目錄
複製代碼