有没有一种方法可以从JSP/Servlet按原始顺序获取POST参数?

4
<form method="post" action="?">
    <input type="text" name="d" value="3">
    <input type="text" name="e" value="5">
    <input type="text" name="c" value="1">
    <input type="text" name="a" value="4">
    <input type="text" name="b" value="2">
    <input type="submit">
</form>

正在处理POST请求:

Enumeration e = request.getParameterNames();
while(e.hasMoreElements()){
    out.println(e.nextElement());
}

这是一个包含参数名称的枚举,其顺序未指定

是否有一种方法可以从POST请求中获取原始文本源?

我想按照原始顺序获取参数,就像Chrome开发者工具所显示的那样:

d=3&e=5&c=1&a=4&b=2

顺便说一下:我尝试使用request.getQueryString()只返回了URL(GET方法)中的查询结果,无法获取任何POST方法中的参数。

4个回答

2

ServletRequest.getInputStream() 返回原始输入流,但您需要使用正确的字符编码来构建POST主体。例如:

r = new BufferedReader(new InputStreamReader(request.getInputStream(), "utf8"));
StringBuilder sb = new StringBuilder();
String line;
while ( (line = r.readLine()) != null) sb.append(line);
System.out.println(sb.toString());

谢谢,我尝试从request.getInputStream()获取数据,但是什么都没有,只有一个空流。也许它已经被ServletRequest解析了? - Koerr
1
确保在尝试读取请求输入流之前,您的Web框架没有读取它。您使用任何Web框架还是只使用Servlet? - Daniel
不,只需在JSP中阅读它,我应该尝试在Servlet中处理request.getInputStream()吗? - Koerr
尝试这个: <%@ page import="java.io.BufferedReader" %> <%@ page import="java.io.InputStreamReader" %><form method="post" action="?"> <input type="text" name="d" value="3"> <input type="text" name="e" value="5"> <input type="text" name="b" value="2"> <input type="submit"> </form> <% BufferedReader r = new BufferedReader(new InputStreamReader(request.getInputStream(), "utf8")); StringBuilder sb = new StringBuilder(); String line; while ( (line = r.readLine()) != null) sb.append(line); System.out.println(sb.toString()); %> - Daniel

0

你可以自己解析URL。只需确保将结果存储在具有可预测迭代顺序的集合中(例如LinkedHashMap)。


但是参数不在URL中。 - Koerr

0
使用 JavaScript,您可以形成一个变量来按顺序保存参数,如果要用逗号分隔开,则将这些参数传递给控制器。此方法可确保按顺序获取值。

0
在表单提交时,您可以调用JavaScript中的某些函数。现在,此函数将读取用户输入的页面数据。您可以创建POST请求并按所需顺序传递这些参数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接