如何确定参数是从Java“发布”还是“获取”的?

2022-09-04 05:35:50

在 ASP 中,有 和 属性,但在 Java 中。似乎我们只有一个集合,可以通过 ,等方式访问。request.formrequest.queryStringrequest.getParamaterMapgetParametersNamesgetParameterValues

有没有办法判断哪些值已经发布,哪些值已经在URL中指定?


附言:

我试图实现的是制作一个可以处理以下情况的页面

  • 读取来自查询字符串的变量 (get)
  • 阅读具有特定名称的单个帖子(例如“xml”)。
  • 如果缺少该帖子,请阅读整个正文(带有 )。request.getReader()

我正在使用雄猫6。

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

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

似乎我不能吃蛋糕,也吃它。

所以,我想解决方案是folowwing:

  • 使用 读取正文。getReader
  • 看看xml帖子是否存在(缺点,我必须手动解析正文。
  • 如果是,请获取 http 消息正文并删除“xml=”部分。
  • 如果不是,好吧,就拿身体吧。
  • 通过以下方式读取查询字符串参数request.getParameter

有什么更好的主意吗?

  • PS:有没有人知道如何使用与 使用的相同方法解析正文?HttpServlet
  • PS:这是一个解码ASP功能。我应该用Java重写它吗?
  • PS:还找到了(现在没有机器来测试它)

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

<%@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>

此代码的输出为

data:from_get
data:from_post

...

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


答案 1

HttpServletRequest.getMethod()

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

您需要做的就是:

boolean isPost = "POST".equals(request.getMethod());

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

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

这比尝试解析自己要简单得多。getQueryString()


答案 2

没有直接的方法。Non-direct - check .getQueryString()