В 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
Любая лучшая идея?
- 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>
вывод этого кода
data:from_get
data:from_post
...
Похоже, чтобы найти, какой параметр пришел откуда, я должен проверить request.getQueryString
.