В 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
.