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

JSP include 指令與動作標籤混用導致引號衝突的解決方案

     編輯:程式設計綜合問答

錯誤現象

JSP 頁面同時使用 `<%@ include file="static.html" %>` 靜態包含與 `` 動態包含,並在 `` 中使用 `<%=request.getParameter("name")%>` 時,編譯報錯或執行期屬性值截斷。

根本原因:雙引號嵌套衝突

<jsp:param name="a1" value="<%=request.getParameter("name") %>"/>

外層 `value="..."` 使用雙引號,內層 `request.getParameter("name")` 也使用雙引號,導致 JSP 編譯器無法正確解析屬性邊界。

修正方法:內層改用單引號

<jsp:param name="a1" value="<%=request.getParameter('name') %>"/>
<jsp:param name="a2" value="<%=request.getParameter('password') %>"/>

JSP 屬性值允許單引號包裹,避免與外層雙引號衝突。

完整修正後的 jsp_include.jsp

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ include file="static.html" %>
<a href="action.jsp">goto two —></a><br>
<jsp:include page="action.jsp" flush="true">
    <jsp:param name="a1" value="<%=request.getParameter('name') %>"/>
    <jsp:param name="a2" value="<%=request.getParameter('password') %>"/>
</jsp:include>

補充:靜態包含 vs 動態包含 差異速查

特性<%@ include %> 靜態 動態
處理階段編譯期(翻譯成 Servlet 時合併)執行期(請求轉發)
參數傳遞不支援支援 ``
目標資源變更需重新編譯主頁面即時生效
適用場景頁首/頁尾、版權聲明等靜態片段需帶參數、動態生成的片段

最佳實踐建議

  • 靜態片段優先用 `<%@ include %>`,效能較好。
  • 動態包含時,**屬性值內的 EL/Scriptlet 字串常量一律用單引號**。
  • 若參數值本身含單引號,可用 `` 或轉義:`<%=request.getParameter("name").replace("'", "\\'")%>`。

總結

JSP 包含機制中最常見的坑是**引號嵌套**。記住:「外層雙引號,內層單引號」即可避開 90% 的編譯/執行錯誤。

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