【发布时间】:2009-06-17 22:33:01
【问题描述】:
在 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。
【问题讨论】:
-
您使用的是什么服务器?太阳HttpServer?
-
您应该获取整个 URL 并反序列化参数。如果你想要的参数在那里,它就是一个 GET。如果它不存在但存在,那么它是一个 POST 参数。