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

JSP 表單驗證:Java 代碼片段在頁面渲染時即執行導致邏輯錯誤

     編輯:程式設計綜合問答

現象:JSP 中 Java 片段 (<% ... %>) 在頁面首次訪問時就執行驗證,顯示「用戶名或密碼錯誤」。

根因

JSP 編譯為 Servlet 後,<% 代碼放入 _jspService(),**每次請求都執行**,不區分 GET/POST。首次 GET 請求參數為 null,驗證失敗輸出錯誤信息。

修正方案

  1. 區分請求方法:
    if ("POST".equalsIgnoreCase(request.getMethod())) { // 驗證邏輯 }
  2. 移至 Servlet/Controller(推薦):
    JSP 僅負責展示,表單提交到 LoginServlet,驗證後轉發/重定向。
  3. 使用 JSTL/EL 隱藏錯誤信息:
    <c:if test="${not empty errorMsg}">${errorMsg}</c:if>,Servlet 設置 request.setAttribute("errorMsg", "...")。

代碼重構示例

// LoginServlet.java
protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
    String u = req.getParameter("user");
    String p = req.getParameter("password");
    if ("admin".equals(u) && "admin".equals(p)) {
        req.getSession().setAttribute("user", u);
        resp.sendRedirect("welcome.jsp");
    } else {
        req.setAttribute("error", "用戶名或密碼錯誤");
        req.getRequestDispatcher("login.jsp").forward(req, resp);
    }
}

最佳實踐

  • **業務邏輯不寫在 JSP**,嚴守 MVC 分層。
  • 字符串比較用 equals,而非 ==。
  • 密碼傳輸必須 HTTPS,存儲用 BCrypt/Argon2 哈希。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved