首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

JSP 中在超鏈接 href 或 form action 使用動態路徑的正確寫法

     編輯:程式設計疑難解答

問題

在 JSP 中嘗試寫:

<a href="<%= request.getContextPath() %>/user/login">登錄</a>
<form action="<%= request.getContextPath() %>/submit">...</form>

雖然能運行,但屬於**腳本小程式**,不符合現代 JSP 最佳實務(JSP 2.0+ 推薦 EL + JSTL,禁用 scriptlet)。

推薦寫法:EL 表達式 + 隱含對象

<a href="${pageContext.request.contextPath}/user/login">登錄</a>
<form action="${pageContext.request.contextPath}/submit">...</form>

為什麼用 `${pageContext.request.contextPath}`?

方式優點缺點
`<%= request.getContextPath() %>`直觀、舊版相容Scriptlet,混合 Java/HTML,難維護、不支援頁面編譯優化、安全審查不通過
`${pageContext.request.contextPath}`標準 EL、無 Java 代碼、自動轉義、IDE 提示、可在靜態分析通過需啟用 EL(`isELIgnored="false"`,預設開啟)
`` (JSTL)自動補全 contextPath、支援參數編碼、最規範需引入 JSTL 標籤庫

完整範例:JSTL ``(最專業)

<%@ taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %>
<a href="<c:url value='/user/login'/>">登錄</a>
<form action="<c:url value='/submit'/>" method="post">...</form>
  • 自動處理 `contextPath`、Session ID 重寫(無 Cookie 時)、參數 URL 編碼。
  • 若專案遷移至不同 Context Path,**零代碼修改**。

Spring MVC / Thymeleaf 等框架中的對應寫法

框架語法
Spring MVC (JSP)`` 或 `${pageContext.request.contextPath}`
Thymeleaf`@{/user/login}` (自動含 contextPath)
JSF`#{request.contextPath}/user/login`

總結

在 ``、`

` 中使用動態路徑,**首選 JSTL ``**,次選 **EL `${pageContext.request.contextPath}`**,**禁用 Scriptlet `<%= %>`**。這不僅是風格問題,更關係到可維護性、安全性、框架遷移性與團隊協作規範。

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