首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 獲取路徑全攻略:Web 環境、獨立應用、JSP/Servlet、ClassLoader 完整指南

     編輯:Java 相關知識

路徑問題困擾無數 Java 開發者。本文系統梳理 Web 容器、獨立應用、JSP/Servlet、ClassLoader 等場景下的絕對/相對路徑獲取方法,附路徑轉換最佳實踐。

一、 Web 容器環境

場景API返回示例說明
Web 應用根目錄getServletContext().getRealPath("/")E:/workspace/project/僅 ServletContext 可用處
Classes 目錄this.getClass().getClassLoader().getResource("").getPath()E:/workspace/project/WEB-INF/classes/通用,非 Web 也可用
上下文路徑request.getContextPath()/project用於生成頁面鏈接
請求 URIrequest.getRequestURI()/project/module/action.do含上下文路徑
當前文件絕對路徑request.getRealPath(request.getServletPath())E:/workspace/project/module/action.doJSP 中常用

二、 獨立 Java 應用

// 當前工作目錄
String cwd = System.getProperty("user.dir"); // 推薦
File f = new File("."); String path = f.getAbsolutePath();

// 類所在目錄(編譯輸出目錄)
String classPath = MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath();
// 或
String classPath = MyClass.class.getResource("").getPath(); // 包目錄
String classPath = MyClass.class.getResource("/").getPath(); // classpath 根

三、 相對路徑 vs 絕對路徑規範

  • 服務端相對路徑:相對 Web 應用根(/ 代表應用根),用於 forward、sendRedirect(需加上下文路徑)。
  • 客戶端相對路徑:相對域名根(https://host/),用於 HTML form action、JS/CSS/圖片引用。統一前綴 ${pageContext.request.contextPath}。
  • 避免使用 ./、../ 相對當前文件路徑,部署遷移極易失效。

四、 通用工具類

public class PathUtils {
    public static String getWebRoot() {
        return System.getProperty("user.dir") + File.separator;
    }
    public static String getClassRoot() {
        return PathUtils.class.getClassLoader().getResource("").getPath();
    }
    public static String toAbsolute(String relative) {
        return new File(relative).getAbsolutePath();
    }
}

五、 總結

路徑本質是「從哪裡開始找」。Web 環境以 ServletContext 為錨,獨立應用以 user.dir 為錨,ClassLoader 以 classpath 為錨。牢記三類錨點,路徑問題不再亂。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved