如果 request.getParameterValues 有空数据,如何签入 Servlet

How to check in Servlet if request.getParameterValues has empty data

我的表格:

<form action="/parvaz.aero/InsertUserCategories" method="post">
    <input type="text" id="fname" name="category" placeholder="">
    <input type="text" id="fname" name="category" placeholder="">
    <input type="text" id="fname" name="category" placeholder="">
    <input type="text" id="fname" name="category" placeholder="">
    <input type="text" id="fname" name="category" placeholder="">
    <input type="submit">
</form>

我的 Servlet 正在获取空值、空值或数据值。

String[] category = request.getParameterValues("category");

签入 Servlet 为:

if (null != category && category.length > 0) {
    try {
        //insert in DB
    } catch (SQLException e) {
        
    }           
} else {
    out.println("There is no data to insert in DB";
}

写入时:out.print(category.length); 通过发送 html 表单为空,其给出的结果为:

5

为什么 servlet 假设空表单长度为 5 而接收时没有任何数据?

我怎么知道它是空的还是有数据?

您似乎希望提交一个包含 5 个同名空字段的表单会给您一个 null 或空数组。这确实不是真的。这只会发送一个包含 5 个空字符串的数组。

只有完全没有输入框才会给你null

<form>
    <input type="submit" />
</form>
String input = request.getParameter("input");
System.out.println(input); // null
System.out.println(input == null); // true

String[] inputs = request.getParameterValues("inputs");
System.out.println(inputs); // null
System.out.println(inputs == null); // true

提交一个空字段将为您提供一个空字符串。

<form>
    <input name="input" />
    <input type="submit" />
</form>
String input = request.getParameter("input");
System.out.println(input); // empty string
System.out.println(input == null); // false
System.out.println(input.isEmpty()); // true

String[] inputs = request.getParameterValues("input");
System.out.println(inputs == null); // false
System.out.println(inputs.length); // 1
System.out.println(Arrays.toString(inputs)); // []
System.out.println(inputs[0].isEmpty()); // true

提交空字段将为您提供一个空字符串数组。

<form>
    <input name="input" />
    <input name="input" />
    <input name="input" />
    <input name="input" />
    <input name="input" />
    <input type="submit" />
</form>
String[] inputs = request.getParameterValues("input");
System.out.println(inputs == null); // false
System.out.println(inputs.length); // 5
System.out.println(Arrays.toString(inputs)); // [, , , , ]
System.out.println(inputs[0].isEmpty()); // true
System.out.println(inputs[1].isEmpty()); // true
System.out.println(inputs[2].isEmpty()); // true
System.out.println(inputs[3].isEmpty()); // true
System.out.println(inputs[4].isEmpty()); // true

你基本上需要调整你的前提条件如下:

if (inputs != null) {
    for (String input : inputs) {
        if (!input.isEmpty()) {
            // This input is not empty. Process it.
        }
    }
}

如果您想事先检查 所有 输入是否为空或为空,请执行此操作:

if (inputs == null) {
    // Inputs were not included in form.
}
else if (Arrays.stream(inputs).allMatch(String::isEmpty)) {
    // Inputs were included in form, but they are all empty.
}
else {
    // At least one input is included in form and not empty.
}