共計 3496 個字符,預計需要花費 9 分鐘才能閱讀完成。
這期內容當中丸趣 TV 小編將會給大家帶來有關 java 絕對路徑及相對路徑是怎樣的,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
1. 基本概念的理解
絕對路徑:絕對路徑就是你的主頁上的文件或目錄在硬盤上真正的路徑,(URL 和物理路徑)例如:
C:xyz est.txt 代表了 test.txt 文件的絕對路徑。
相對路徑:相對與某個基準目錄的路徑。包含 Web 的相對路徑(HTML 中的相對目錄),例如:在
Servlet 中,/ 代表 Web 應用的跟目錄。和物理路徑的相對表示。例如:./ 代表當前目錄, ../ 代表上級目錄。這種類似的表示,也是屬于相對路徑。
RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax,
2. 關于 JSP/Servlet 中的相對路徑和絕對路徑。
2.1 服務器端的地址
服務器端的相對地址指的是相對于你的 web 應用的地址,這個地址是在服務器端解析的(不同于 html 和 javascript 中的相對地址,他們是由客戶端瀏覽器解析的)也就是說這時候在 jsp 和 servlet 中的相對地址應該是相對于你的 web 應用。
其用到的地方有:
forward:servlet 中的 request.getRequestDispatcher(address); 這個 address 是在服務器端解析的,所以,你要 forward 到 a.jsp 應該這么寫:request.getRequestDispatcher(“/user/a.jsp”)這個 / 相對于當前的 web 應用 webapp,其絕對地址就是:http://192.168.0.1/webapp/user/a.jsp。sendRedirect:在 jsp 中 %response.sendRedirect(/rtccp/user/a.jsp %
2.22、客戶端的地址
所有的 html 頁面中的相對地址都是相對于服務器根目錄 (http://192.168.0.1/) 的,而不是 (跟目錄下的該 Web 應用的目錄) http://192.168.0.1/webapp/ 的。Html 中的 form 表單的 action 屬性的地址應該是相對于服務器根目錄(http://192.168.0.1/) 的,所以,如果提交到 a.jsp 為:action= /webapp/user/a.jsp 或 action= %=request.getContextPath()% /user/a.jsp;
提交到 servlet 為 actiom= /webapp/handleservlet Javascript 也是在客戶端解析的,所以其相對路徑和 form 表單一樣。
因此,一般情況下,在 JSP/HTML 頁面等引用的 CSS,Javascript.Action 等屬性前面最好都加上
%=request.getContextPath()% , 以確保所引用的文件都屬于 Web 應用中的目錄。另外,應該盡量避免使用類似 . , ./ , ../../ 等類似的相對該文件位置的相對路徑,這樣當文件移動時,很容易出問題。
3. JSP/Servlet 中獲得當前應用的相對路徑和絕對路徑
3.1 JSP 中獲得當前應用的相對路徑和絕對路徑
根目錄所對應的絕對路徑:request.getRequestURI()
文件的絕對路徑 :application.getRealPath(request.getRequestURI());
當前 web 應用的絕對路徑 :application.getRealPath(/
取得請求文件的上層目錄:new File(application.getRealPath(request.getRequestURI())).getParent()
3.2 Servlet 中獲得當前應用的相對路徑和絕對路徑
根目錄所對應的絕對路徑:request.getServletPath();
文件的絕對路徑 :request.getSession().getServletContext().getRealPath
(request.getRequestURI())
當前 web 應用的絕對路徑 :servletConfig.getServletContext().getRealPath( /
(ServletContext 對象獲得幾種方式:
javax.servlet.http.HttpSession.getServletContext()
javax.servlet.jsp.PageContext.getServletContext()
javax.servlet.ServletConfig.getServletContext()
)
4.java 的 Class 中獲得相對路徑,絕對路徑的方法
4.1 單獨的 Java 類中獲得絕對路徑
根據 java.io.File 的 Doc 文擋,可知:
默認情況下 new File(/) 代表的目錄為:System.getProperty(user.dir)。
一下程序獲得執行類的當前路徑
package org.cheng.file;
import java.io.File;
public class FileTest {
public static void main(String[] args) throws Exception {
System.out.println(Thread.currentThread().getContextClassLoader().getResource());
System.out.println(FileTest.class.getClassLoader().getResource());
System.out.println(ClassLoader.getSystemResource());
System.out.println(FileTest.class.getResource());
System.out.println(FileTest.class.getResource( /));
//Class 文件所在路徑
System.out.println(new File( /).getAbsolutePath());
System.out.println(System.getProperty( user.dir));
}
}
4.2 服務器中的 Java 類獲得當前路徑(來自網絡)
(1).Weblogic
WebApplication 的系統文件根目錄是你的 weblogic 安裝所在根目錄。
例如:如果你的 weblogic 安裝在 c:eaweblogic700…..
那么,你的文件根路徑就是 c:.
所以,有兩種方式能夠讓你訪問你的服務器端的文件:
a. 使用絕對路徑:
比如將你的參數文件放在 c:yourconfigyourconf.properties,
直接使用 new FileInputStream(yourconfig/yourconf.properties
b. 使用相對路徑:
相對路徑的根目錄就是你的 webapplication 的根路徑,即 WEB-INF 的上一級目錄,將你的參數文件放
在 yourwebappyourconfigyourconf.properties,
這樣使用:
new FileInputStream(./yourconfig/yourconf.properties
這兩種方式均可,自己選擇。
(2).Tomcat
在類中輸出 System.getProperty(user.dir 顯示的是 %Tomcat_Home%/bin
(3).Resin
不是你的 JSP 放的相對路徑, 是 JSP 引擎執行這個 JSP 編譯成 SERVLET
的路徑為根. 比如用新建文件法測試 File f = new File(a.htm
這個 a.htm 在 resin 的安裝目錄下
(4). 如何讀相對路徑哪?
在 Java 文件中 getResource 或 getResourceAsStream 均可
例:getClass().getResourceAsStream(filePath);//filePath 可以是 /filename , 這里的 / 代表 web
發布根路徑下 WEB-INF/classes
默認使用該方法的路徑是:WEB-INF/classes。已經在 Tomcat 中測試。
5. 讀取文件時的相對路徑,避免硬編碼和絕對路徑的使用。
上述就是丸趣 TV 小編為大家分享的 java 絕對路徑及相對路徑是怎樣的了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注丸趣 TV 行業資訊頻道。