从 servlet 读取 POST 请求参数

Posted

技术标签:

【中文标题】从 servlet 读取 POST 请求参数【英文标题】:read POST request parameter from servlet 【发布时间】:2014-04-08 06:44:13 【问题描述】:

我发现了其他类似的问题,但我无法弄清楚为什么我无法(我有一个表单)(GET 参数是可以的)。因此,使用 firebug,我可以看到表单中引入的参数值,但下面的 system.out.println 显示它们为 null。

public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException 
    try 
        IPentahoSession userSession = PentahoSessionHolder.getSession();
        String username = userSession.getName().toString();
        openSql();
        response.setContentType(
                "text/html");
        PrintWriter pw = response.getWriter();

        pw.println(
                "<html>");
        pw.println(
                "<head><title>Hello Pentaho</title></title>");
        pw.println(
                "<body>");
        pw.println(
                "<h1>Hello " + username + " Pentaho </h1>");

        pw.println(
                "<form method=\"post\" action=\"HelloPentaho\" >"
                + "Nume: <input type=\"varchar\" name=\"param1\" value=\"\"> <br>"
                + "Nume raport original: <input type=\"varchar\" name=\"param2\" value=\"\"> <br>"
                + "Cale raport original: <input type=\"text\" name=\"param3\" value=\"\"> <br>"
                + "<input type=\"submit\" value=\"Trimite date in baza\">"
                + "</form> ");

        pw.println(
                "<h1> The selected parameters are: " + request.getParameter("param1") + " " + request.getParameter("param2") + " " + request.getParameter("param3") + "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++<br /></h1>");
        pw.println(
                "</body></html>");

        String insert = "INSERT INTO PREFERINTE_UTILIZATOR (nume,nume_rap_org,cale_rap_org) values (?,?,?);";
        PreparedStatement pstmnt = conn.prepareStatement(insert);
        pstmnt.setString(1, request.getParameter("param1"));
        pstmnt.setString(2, request.getParameter("param2"));
        pstmnt.setString(3, request.getParameter("param3"));
        pstmnt.executeUpdate();

     catch (ClassNotFoundException ex) 
        Logger.getLogger(HelloPentaho.class.getName()).log(Level.SEVERE, null, ex);
     catch (SQLException ex) 
        Logger.getLogger(HelloPentaho.class.getName()).log(Level.SEVERE, null, ex);
    



public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException 
    doPost(request, response);

【问题讨论】:

您能否更详细地描述您遇到的错误。 在我按下表单提交按钮后,pw.println 应该会带上表单中引入的参数,但它带来的所有参数都是空的。在firebug中,我可以看到post发送的参数值,但我在网页中看不到它们。 我过去也遇到过类似的情况。交叉检查表单上的输入名称一次,看看您是否也在 servlet 上请求相同的参数。 我仔细检查了一遍。没有运气 有人有答案吗? 【参考方案1】:

或者修改您的 doPost 代码以在控制台中打印值并查看打印的内容。试试这个:

Enumeration enParams = request.getParameterNames(); 
while(enParams.hasMoreElements())
 String paramName = (String)enParams.nextElement();
 System.out.println("Attribute Name - "+paramName+", Value - "+request.getParameter(paramName));

【讨论】:

我尝试了枚举,但在控制台或网页中没有任何打印(我也尝试了 pw.println)。唯一被打印的信息是 System.out.println(enParams) 具有以下内容:org.springframework.security.ui.savedrequest.Enumerator@22c837c1 打印出 enParams 显然会打印出一个 Enumerator 对象。真的很奇怪。通常最常见的错误是:从 jsp 映射 servlet 不正确或 servlet 中的参数名称错误。 看来pentaho BI有问题。感谢 Ritikesh 的回复

以上是关于从 servlet 读取 POST 请求参数的主要内容,如果未能解决你的问题,请参考以下文章

servlet 从java中获取参数

vue + nuxt.js - 如何读取从外部请求接收到的 POST 请求参数

如何使用 JavaScript 读取 post 请求参数

java发送post请求传送文本和文件

post请求 参数json序列化报错: cannot deserialize from Object value

JAVA基础篇—Servlet小结