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

JSP 表單處理與資料接收完整教學

     編輯:JSP 入門

JSP 表單處理與資料接收完整教學

表單是 Web 互動核心。JSP 透過 HttpServletRequest 接收 GET/POST 資料,支援一般欄位、複選框、下拉選單、檔案上傳等多種型態。


GET vs POST 比較

特性GETPOST
資料位置URL 查詢字串 (?key=val)HTTP Body
可見性網址列明文可見不直接顯示
長度限制~2KB (瀏覽器/伺服器限制)無實質限制 (可設定)
書籤/分享可直接複製網址不可
快取可被快取不快取
安全性不適合敏感資料較適合 (仍需 HTTPS)
適用場景查詢、搜尋、分頁、幂等操作新增、修改、刪除、上傳、登入

接收請求參數 API

方法回傳型別用途
getParameter(name)String取得單一值 (多值取第一個)
getParameterValues(name)String[]取得同名多值 (checkbox、multi-select)
getParameterNames()Enumeration<String>列舉所有參數名稱
getParameterMap()Map<String, String[]>一次取得所有 (適合綁定工具)

基本範例:GET 參數接收

<%@ page contentType="text/html;charset=UTF-8" %>
<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>GET 示範</title></head>
<body>
  <h2>搜尋結果</h2>
  <p>關鍵字:<%= request.getParameter("q") %></p>
  <p>分類:<%= request.getParameter("cat") %></p>
</body></html>

測試網址:search.jsp?q=Java&cat=programming


表單 POST 處理與中文編碼

前端表單 (form.html)

<form action="process.jsp" method="POST">
  姓名:<input type="text" name="username" required><br>
  性別:<input type="radio" name="gender" value="M">男
        <input type="radio" name="gender" value="F">女<br>
  興趣:
  <input type="checkbox" name="hobby" value="reading">閱讀
  <input type="checkbox" name="hobby" value="sport">運動
  <input type="checkbox" name="hobby" value="music">音樂<br>
  城市:<select name="city">
    <option value="TPE">台北</option>
    <option value="TAI">台中</option>
    <option value="KHH">高雄</option>
  </select><br>
  <button type="submit">送出</button>
</form>

後端處理 (process.jsp)

<%@ page contentType="text/html;charset=UTF-8" %>
<% 
  // 【關鍵】POST 中文編碼必須在讀取參數前設定
  request.setCharacterEncoding("UTF-8"); 
%>
<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>處理結果</title></head>
<body>
  <h2>接收資料</h2>
  <p>姓名:<%= request.getParameter("username") %></p>
  <p>性別:<%= request.getParameter("gender") %></p>
  
  <p>興趣:
  <%
    String[] hobbies = request.getParameterValues("hobby");
    if (hobbies != null) {
      for (String h : hobbies) out.print(h + " ");
    } else {
      out.print("無");
    }
  %>
  </p>
  
  <p>城市:<%= request.getParameter("city") %></p>
  
  <hr>
  <h3>所有參數列表</h3>
  <table border="1">
    <tr><th>名稱</th><th>值</th></tr>
    <%
      java.util.Enumeration names = request.getParameterNames();
      while (names.hasMoreElements()) {
        String name = names.nextElement();
        String[] vals = request.getParameterValues(name);
        out.println("<tr><td>" + name + "</td><td>" + String.join(", ", vals) + "</td></tr>");
      }
    %>
  </table>
</body></html>

檔案上傳表單 (multipart/form-data)

參考 JSP 檔案上傳完整實作,使用 Commons FileUpload 或 Servlet 3.0 @MultipartConfig。


防止重複送出:PRG 模式

  1. 表單 POST 至 process.jsp
  2. process.jsp 處理完成後 response.sendRedirect("result.jsp")
  3. 瀏覽器 GET result.jsp 顯示結果
  4. 使用者重整結果頁不會再次提交

資料驗證與綁定 (進階)

手動驗證繁瑣,建議導入:

  • Bean Validation (JSR 380):@NotNull, @Size, @Pattern 等標註於 JavaBean,搭配 Validator 驗證
  • Spring MVC @ModelAttribute + BindingResult:自動綁定表單到物件、收集錯誤
  • Apache Commons BeanUtils:BeanUtils.populate(bean, request.getParameterMap()) 快速綁定

安全防護清單

  1. XSS 防護:輸出至 HTML 時使用 fn:escapeXml() (JSTL) 或 StringEscapeUtils.escapeHtml4()
  2. CSRF 防護:表單加入隱藏 Token,Session 驗證 (Spring Security 自動提供)
  3. SQL 注入:使用 PreparedStatement / ORM,絕不拼接 SQL 字串
  4. 檔案上傳:驗證類型、大小、重新命名、存放非 Web 目錄
  5. HTTPS:所有表單傳輸強制加密
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved