在 ASP 中,有 request.form
和 request.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
读取查询字符串参数
还有更好的主意吗?
只是为了澄清事情。问题似乎在于,使用 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>
这段代码的输出是
data:from_get
data:from_post
...
似乎为了找到哪个参数来自哪里,我必须检查request.getQueryString
。
最佳答案
HttpServletRequest.getMethod() :
Returns the name of the HTTP method with which this request was made, for example, GET, POST, or PUT. Same as the value of the CGI variable REQUEST_METHOD.
您需要做的就是:
boolean isPost = "POST".equals(request.getMethod());
此外,我真的很困惑为什么您不简单地使用 request.getParameter("somename")
来检索作为请求参数发送的值。这个方法returns the parameter regardless of whether the request was sent via a GET or a POST :
Request parameters are extra information sent with the request. For HTTP servlets, parameters are contained in the query string or posted form data.
这比尝试自己解析 getQueryString()
简单得多。
关于java - Java如何判断一个参数是 "posted"还是 "geted"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58940948/