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

JSP/Servlet 取得請求參數:request.getParameter 為何為空?

     編輯:程式設計疑難解答

常見原因速查表

原因檢查重點解決方式
表單 action 與 Servlet 映射不符<form action="/xxx"> vs @WebServlet("/yyy") 或 web.xml url-pattern確保完全一致,包含大小寫與前導斜線
輸入框缺少 name 屬性<input type="text"> 無 name="username"補上 name,getParameter("username") 才能取值
GET/POST 方法不匹配form method="POST" 但 Servlet 僅覆寫 doGet覆寫 doPost 或統一用 doGet,或改用 service
編碼導致中文亂碼/空值POST 請求未設 request.setCharacterEncoding("UTF-8")在讀取參數**第一行**設定編碼
使用了 enctype="multipart/form-data"檔案上傳表單,一般 getParameter 失效用 Part / Commons FileUpload / ServletFileUpload 解析
轉發/重導向丟失參數RequestDispatcher.forward 後參數仍在;sendRedirect 參數丟失重導向需手動帶參數或用 Session 傳遞

最小可行範例

JSP (form.jsp)

<%@ page contentType="text/html;charset=UTF-8" %>
<form action="process" method="POST">
    用戶名:<input type="text" name="username" /><br/>
    密碼:<input type="password" name="pwd" /><br/>
    <input type="submit" value="送出" />
</form>

Servlet (ProcessServlet.java)

@WebServlet("/process")
public class ProcessServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
            throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8"); // 必須在 getParameter 前
        String username = req.getParameter("username");
        String pwd = req.getParameter("pwd");
        System.out.println("username=" + username + ", pwd=" + pwd);
        // 後續邏輯...
    }
}

web.xml (若不使用註解)

<servlet>
    <servlet-name>ProcessServlet</servlet-name>
    <servlet-class>com.example.ProcessServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ProcessServlet</servlet-name>
    <url-pattern>/process</url-pattern>
</servlet-mapping>

除錯技巧

  1. 瀏覽器開發者工具 → Network → 查看 Request Payload / Form Data 是否正確送出。
  2. Servlet 第一行印出 req.getParameterMap() 確認伺服器端實際收到什麼。
  3. 檢查 Tomcat 日誌 catalina.out 是否有錯誤堆疊。

總結

request.getParameter 為空 90% 是 **表單 action 與 Servlet 映射不符** 或 **輸入框缺 name 屬性**。對照上表逐項排查即可快速定位。

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