如何确定参数是否已从Java"发布"或"发布"?

ope*_*sas 11 java post get http

在ASP中,有request.formrequest.queryString属性,但在Java中.好像我们只有一个集合,它可以通过以下方式访问request.getParamaterMap,getParametersNames,getParameterValues等.

有没有办法告诉哪些值已经发布以及哪些值已在URL中指定?


PS:

我想要实现的是创建一个可以处理以下情况的页面

  • 读取来自查询字符串的变量(get)
  • 阅读具有特定名称的单个帖子(例如,"xml").
  • 如果该帖子丢失,请阅读全身(带 request.getReader()).

我正在使用tomcat 6.

根据我到目前为止看到的,如果我发布了一个request.getReader(),发布的值不再出现在getParamater集合中,但仍然存在查询字符串参数.

另一方面,如果我发出任何getParameters方法,则getReader返回空字符串.

好像我不能吃蛋糕也吃.

所以,我想解决方案是:

  • 阅读身体getReader.
  • 看看xml帖子是否存在(缺点,我必须手动解析正文).
  • 如果是,请获取http消息正文并删除"xml ="部分.
  • 如果它不是,那么,只是得到身体.
  • 通过读取查询字符串参数 request.getParameter

有什么好主意吗?

  • PS:有人知道如何使用相同的方法解析身体HttpServlet吗?
  • PS:是解码ASP功能.我应该用Java重写它吗?
  • PS:也找到了(没有机器现在测试它)

只是为了澄清事情.问题似乎是,getParameter您获得发布的值以及通过URL传递的值,请考虑以下示例:

<%@page import="java.util.*"%>
<%
  Integer i;
  String name;
  String [] values;

  for (Enumeration e = request.getParameterNames(); e.hasMoreElements();) {

    name = (String) e.nextElement();
    values = request.getParameterValues( name );

    for ( i=0; i < values.length; i ++ ) {
      out.println( name + ":" + values[i] + "<br/>" );
    }
  }
%>

<html>
<head><title>param test</title>
</head>
<body>
  <form method="post" action="http://localhost:8080/jsp_debug/param_test.jsp?data=from_get">
    <input type="text" name="data" value="from_post">
    <input type="submit" value="ok">
  </form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

这段代码的输出是

data:from_get
data:from_post

...
Run Code Online (Sandbox Code Playgroud)

似乎为了找到哪个参数来自哪里,我必须检查request.getQueryString.

mat*_*t b 27

HttpServletRequest.getMethod():

返回用于发出此请求的HTTP方法的名称,例如,GET,POST或PUT.与CGI变量REQUEST_METHOD的值相同.

你需要做的就是:

boolean isPost = "POST".equals(request.getMethod());
Run Code Online (Sandbox Code Playgroud)

另外,我真的很困惑为什么你不会简单地request.getParameter("somename")用来检索作为请求参数发送的值.无论请求是通过GET还是POST发送,此方法都会返回参数:

请求参数是随请求一起发送的额外信息.对于HTTP servlet,参数包含在查询字符串或发布的表单数据中.

比试图解析getQueryString()自己要简单得多.

  • 另外,不要忘记我可以有一个包含查询字符串信息的帖子(你只需要在表单标签的action参数中使用'xx.jsp?field1 = value1,field2 = value2'),在这种情况下,请求. getMethod将返回"POST",但我会在getParameter集合中混合"发布"和"geted"参数...这就是问题... (2认同)

Vug*_*skr 5

没有直接的方法.非直接 - 检查.getQueryString()