【问题标题】:Is there a way to get POST parameters by original order from JSP/Servlet?有没有办法通过 JSP/Servlet 的原始顺序获取 POST 参数?
【发布时间】:2015-03-31 07:53:17
【问题描述】:
<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());
}

这是一个Enumeration,其中包含按未指定顺序

的参数名称

有没有办法从 POST 请求中获取原始文本来源?

我想像这样按原始顺序获取参数(如 Chrome 开发者工具所示):

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

btw:我试过request.getQueryString() 只是从 URL(GET 方法)返回查询,无法从 POST 方法获取任何参数。

【问题讨论】:

    标签: java jsp servlets


    【解决方案1】:

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

    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解析了?
    • 在您尝试读取请求输入流之前,请确保您的 Web 框架没有读取它。您是在使用任何 Web 框架还是只使用 servlet?
    • 不,只是在 JSP 中阅读,我应该尝试在 Servlet 中处理 request.getInputStream() 吗?
    • 试试这个:
    【解决方案2】:

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

    【讨论】:

    • 但是参数不在URL中
    【解决方案3】:

    通过使用java script,如果您想用逗号将其分开,您将形成一个将按顺序保存您的参数的变量。然后将这些参数传递给您的控制器。这种方法让您可以按顺序获取值。

    【讨论】:

      【解决方案4】:

      在提交表单时,您可以在 javascript 中调用一些函数。现在这个函数将从用户输入的页面读取数据。您可以创建发布请求并按要求的顺序传递此参数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-17
        • 1970-01-01
        • 2021-09-25
        • 1970-01-01
        • 2015-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多