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

Java Web 開發必懂:相對路徑與絕對路徑深度解析

     編輯:Java 綜合教學

Java Web 開發必懂:相對路徑與絕對路徑深度解析

在 Java Web 專案中,路徑問題經常導致資源找不到、重導向錯誤等困擾。搞清楚相對路徑與絕對路徑的解析規則,是避免坑的關鍵。

一、相對路徑:以「當前資源」為基準,但會變

相對路徑不以 / 開頭,例如 page.jsp、../css/style.css。其基準是「當前請求的資源位置」。然而,當發生請求轉發時,基準會改變,導致同一段相對路徑在不同情境下指向不同資源,因此不建議在轉發鏈中使用相對路徑。

二、絕對路徑:以 / 開頭,解析端不同含義不同

絕對路徑以 / 開頭,但含義取決於誰在解析:

解析端/ 代表典型場景
瀏覽器當前伺服器主機根目錄(https://host:port/)response.sendRedirect() 重導向、<a href>、<form action>、JS/AJAX 請求 URL
伺服器端當前 Web 應用根目錄(https://host:port/contextPath/,即 WebContent)RequestDispatcher.forward() 轉發、web.xml 的 url-pattern、@WebServlet 路徑、JSP <jsp:include>

口訣:瀏覽器看主機,伺服器看應用。

三、<base> 標籤:統一全頁相對路徑基準

在 <head> 中宣告 <base href="..." />,可為整份 HTML 文件的所有相對路徑(連結、圖片、表單、腳本等)指定統一基準。

動態產生 Base 路徑最佳實踐

<base href="https://${pageContext.request.serverName}:${pageContext.request.serverPort}${pageContext.request.contextPath}/" />

等同於手動拼裝:

  • 協定:request.getProtocol()(如 HTTP/1.1)
  • 主機:request.getServerName()
  • 埠:request.getServerPort()
  • 應用虛擬路徑:request.getContextPath()

四、<base> 使用四大注意事項

  1. 格式:<base href="https://主機地址/Web應用虛擬路徑/" />,結尾必須有 /。
  2. 位置:必須寫在 <head> 內部,且位於所有使用相對路徑的標籤之前。
  3. 作用範圍:僅對相對路徑生效,絕對路徑(以 / 或完整 URL 開頭)不受影響。
  4. 錨點:頁面內錨點(#id)也會以 base 為基準,若需跳回當前頁錨點,請使用完整 URL 或 JS 處理。

五、實戰建議

  • 伺服器端轉發(forward)一律使用以 / 開頭的絕對路徑(相對於 contextPath)。
  • 重導向(redirect)建議使用完整路徑(含 contextPath),或搭配 <base> 使用相對路徑。
  • JSP/CSS/JS/圖片等靜態資源引用,推薦使用 ${pageContext.request.contextPath}/resource/path 或 <base> 統一管理。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved