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

JavaWeb 參數含空格導致 500 錯誤的原因與解決

     編輯:程式設計綜合問答

問題現象

在 JSP 頁面傳遞參數 book=SQL SERVER 2008(含空格)時,後端報 500 錯誤;而 book=SQLSERVER2008(無空格)則正常。

根本原因

URL 參數中的空格在 HTTP 傳輸中會被編碼為 %20 或 +。若後端直接以字串比對或未正確解碼,會導致參數值不匹配或解析異常。示例中,前端連結為:

<a href="book.jsp?book=SQL SERVER 2008">SQL SERVER 2008</a>

瀏覽器實際發送請求時,URL 會被編碼為 book.jsp?book=SQL%20SERVER%202008。若後端使用 request.getParameter("book") 會自動解碼為 SQL SERVER 2008,但若在 SQL 查詢或邏輯判斷中未處理空格,可能引發錯誤。

解決方案

  1. 前端編碼:使用 JSTL <c:url> 或 JavaScript encodeURIComponent 產生連結。
    <a href="<c:url value='book.jsp'><c:param name='book' value='SQL SERVER 2008'/></c:url>">...</a>
  2. 後端正確接收:request.getParameter 已自動解碼,直接使用即可,但寫入 SQL 時務必使用 PreparedStatement 防注入,避免手動拼接字串。
  3. 資料庫查詢:若資料庫欄位值本身含空格,查詢條件需完全一致(含空格),否則查無資料。

最佳實踐

  • 避免在 URL 參數中直接使用含特殊字元的值,改用 ID 或編碼後的 Token。
  • 所有使用者輸入進入 SQL 必須經過參數化查詢。
  • Tomcat 8+ 預設使用 UTF-8 編碼,確保 server.xml 中 URIEncoding="UTF-8"。

理解 URL 編碼機制,正確處理參數傳遞,即可避免空格導致的 500 錯誤。

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