从html返回null的java httpservlet getparameter

Posted

技术标签:

【中文标题】从html返回null的java httpservlet getparameter【英文标题】:java httpservlet getparameter from html returning null 【发布时间】:2019-05-21 11:30:04 【问题描述】:

我正在服务器上运行一个 .jsp 文件并尝试将用户输入表单数据发送到 HttpServlet 中的“doPost”方法。

当我尝试在 doPost 中打印用户输入的 val 时,它们为空。

我试图通过他们的 html ID 获取 vals,但由于某种原因这不起作用。 HTML 中可能有一个简单的问题。

提交按钮似乎正在工作,因为它正在正确路由回我试图解析用户输入数据的 .java 文件。只有 val 为 null。

这是我的代码。

谢谢! :)

<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=US-ASCII"
    pageEncoding="US-ASCII"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Binary Encoder</title>
</head>
<body>

    <h2>Binary Encoding: Encode any number from 0 to 65535</h2> <br>
    <h3>Date=<%= new Date() %>
    </h3>

    <!-- in this form I need to figure out how to get user input into Binaryencoder.java-->
    <form action="../Binaryencoder" method="post">
        Input number you want to encode (0 to 65536):<br>
        <input type="number" id="toencode"><br>

        Input first number for encoding (0 to 255) :<br>
        <input type="number" id="mask1"><br><br>

        Input second number for encoding (0 to 255) :<br>
        <input type="number" id="mask2"><br><br>

        <input type="submit" id="submit" value="Submit">
    </form>


</body>
</html>

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

        //code to process the form... 
        String toencode = request.getParameter("toencode");
        String mask1 = request.getParameter("mask1");
        String mask2 = request.getParameter("mask2");

        //response is the thing that goes back to HTML page 
        PrintWriter out = response.getWriter();

        String output = String.format("Number to encode is: %s", toencode);
        String op1 = String.format("Mask1 is: %s", mask1);
        String op2 = String.format("Mask2 is: %s", mask2);

        out.println(output);
        out.println(op1); 
        out.println(op2); 

    

【问题讨论】:

【参考方案1】:

问题在于这些标签,例如:&lt;input type="number" id="toencode"&gt; 该标签需要 name 属性,如下所示:name="mynumber"

servlet 从 JSP 接收请求参数的名称-值对。在您的 JSP 中缺少 name。编写 JSP 的正确方法是:&lt;input type="number" id="toencode" name="mynumber"&gt;

在servlet程序中,在doPost方法中访问posted参数及其值如下:

public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws IOException, ServletException 
    String myNumber = request.getParameter("mynumber");
    getServletContext().log("# My Number: " + myNumber); // this prints in the log file
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.println("My Number: " + myNumber); // this prints on the browser page

这应该会显示您在浏览器页面的 JSP 中输入的数字,例如:My Number: 999。您也可以参考服务器日志。

【讨论】:

另外,请参阅这些:<input type="number"> 和 HTML: Number Input Control。【参考方案2】:

为您的输入添加名称属性,如下所示:

<input type="number" name="toencode" id="toencode">
<input type="number" name="mask1" id="mask1">
<input type="number" name="mask2" id="mask2">

request.getParameter 无法识别 id 属性。

【讨论】:

【参考方案3】:

三个输入的类型应该是文本,而不是数字。试试看。

【讨论】:

将所有类型更改为“文本”,仍然无效。你确定它需要是文本吗?我正在尝试以这种形式输入数字。 @MukulK。也许不是问题,H5中添加了数字类型。为什么在这里调用 doGet 方法?您可以删除它或将下面的代码剪切为 doGet 方法。【参考方案4】:

在三个表单输入字段中,使用name 属性来代替id 或除id 之外。只有这些输入字段的值作为参数包含在请求中。

【讨论】:

这解决了我的问题。非常感谢 !! :) 现在我在 Java 中有用户输入【参考方案5】:

您的表单似乎缺少所有字段的 name 属性。

尝试改变这个:

<input type="number" id="toencode">

为此(将name 属性添加到toencode 字段):

<input type="number" id="toencode" name="toencode">

显然,对于其他字段(mask1、mask2),names 的值将匹配它们的 ids

【讨论】:

以上是关于从html返回null的java httpservlet getparameter的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 java 套接字将图像从 android studio 发送到 pc,filePath 返回 null

将表单单选值发送到 Java servlet,返回 null

如何访问从sql函数获取的java中的多个返回值

getters从活动类返回null

System.console() 返回 null

与maven的Java项目无法找到资源