Здравствуйте, srr, Вы писали:
srr>Помогите начинающему
srr>В сервлете получаю запрос типа POST. если доставать даные используя request.getParameter("QW") то все хорошо. srr>Но необходимо достать все тело запроса — делаю так:
srr> ServletInputStream InSt=request.getInputStream() ; srr> BufferedReader is = new BufferedReader(new InputStreamReader(InSt)); srr> String fromServer=""; srr> String ls=null; srr> while ((ls= is.readLine()) != null) srr> { srr> fromServer +=ls; srr> ls=null; srr> } srr> is.close();
srr>короче в fromServer все тело и накапливается. в итоге в fromServer строка вида "%3C%3Fxml+version%3D%221.0%22%3F%3E%0D%0A%3CSaveData%3E%3CWorkSpaseTeleTecon+Name%3D%22%D0+%D0%B0" — это я так понимаю закодированые Mime в application/x-www-form-urlencoded — Так вот как мне это все ракодировать? или хотя бы как достать так чтобы раскодировать не пришлось самому?
После того, как цикл отработал, воспользуйся URLDecoder:
В сервлете получаю запрос типа POST. если доставать даные используя request.getParameter("QW") то все хорошо.
Но необходимо достать все тело запроса — делаю так:
ServletInputStream InSt=request.getInputStream() ;
BufferedReader is = new BufferedReader(new InputStreamReader(InSt));
String fromServer="";
String ls=null;
while ((ls= is.readLine()) != null)
{
fromServer +=ls;
ls=null;
}
is.close();
короче в fromServer все тело и накапливается. в итоге в fromServer строка вида "%3C%3Fxml+version%3D%221.0%22%3F%3E%0D%0A%3CSaveData%3E%3CWorkSpaseTeleTecon+Name%3D%22%D0+%D0%B0" — это я так понимаю закодированые Mime в application/x-www-form-urlencoded — Так вот как мне это все ракодировать? или хотя бы как достать так чтобы раскодировать не пришлось самому?
Здравствуйте, srr, Вы писали:
srr>Помогите начинающему
srr>В сервлете получаю запрос типа POST. если доставать даные используя request.getParameter("QW") то все хорошо. srr>Но необходимо достать все тело запроса — делаю так:
srr> ServletInputStream InSt=request.getInputStream() ; srr> BufferedReader is = new BufferedReader(new InputStreamReader(InSt)); srr> String fromServer=""; srr> String ls=null; srr> while ((ls= is.readLine()) != null) srr> { srr> fromServer +=ls; srr> ls=null; srr> } srr> is.close();
srr>короче в fromServer все тело и накапливается. в итоге в fromServer строка вида "%3C%3Fxml+version%3D%221.0%22%3F%3E%0D%0A%3CSaveData%3E%3CWorkSpaseTeleTecon+Name%3D%22%D0+%D0%B0" — это я так понимаю закодированые Mime в application/x-www-form-urlencoded — Так вот как мне это все ракодировать? или хотя бы как достать так чтобы раскодировать не пришлось самому?
Это не помогает — запрос то ведь типа POST он в теле все пергоняет а getQueryString(); достате парметры запроса из заголовка те что после адреса идут.Достать все содержимое тела запроса я могу но его надо сконвертировать (декодиросвать) — вот в чем загвоздка у меня.
доставать по парметрам типа getParameter("QW") — это конечно работате но в моем случае никаких парметров небудет — сразу в теле POST запроса пергоняется документ.
srr>Это не помогает — запрос то ведь типа POST он в теле все пергоняет а getQueryString(); достате парметры запроса из заголовка те что после адреса идут.Достать все содержимое тела запроса я могу но его надо сконвертировать (декодиросвать) — вот в чем загвоздка у меня. srr> доставать по парметрам типа getParameter("QW") — это конечно работате но в моем случае никаких парметров небудет — сразу в теле POST запроса пергоняется документ.
srr>Помогите плиз !
Может, не самое прямое решение, но работает
/**
* Метод разбирает строки URL, и заменяет %ХХ на их байтовое представление
* Логика взята из метода
* org.apache.catalina.util.RequestUtil.parseParameters(Map map, byte[] data, String encoding)
* @param request String строка запросы
* @return String строка с нормальными символами
*
*/
public static String parseURLEncodedRequest(String request, String encoding){
int len = request.length();
byte[] data = new byte[len];
request.getBytes(0, len, data, 0);
int ix = 0;
int ox = 0;
while (ix < data.length) {
byte c = data[ix++];
if (c == '%'){
data[ox++] = (byte)((convertHexDigit(data[ix++]) << 4)
+ convertHexDigit(data[ix++]));
} else {
data[ox++] = c;
}
}
try {
return new String(data, 0, ox, encoding);
}
catch (UnsupportedEncodingException ex) {
return new String(data, 0, ox);
}
}
/**
* Convert a byte character value to hexidecimal digit value.
* Логика взята из метода
* org.apache.catalina.util.RequestUtil.convertHexDigit(byte b)
* @param b the character value byte
*/
private static byte convertHexDigit(byte b) {
if ((b >= '0') && (b <= '9')) return (byte)(b - '0');
if ((b >= 'a') && (b <= 'f')) return (byte)(b - 'a' + 10);
if ((b >= 'A') && (b <= 'F')) return (byte)(b - 'A' + 10);
return 0;
}
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
я еше чуть подрпавил способ извлечения даных из POST запроса, а то с прямым использованием getInputStream могут как выяснилось возникнуть проблемы при закрытии потока.
Короче кому интерсно вот итог — достате даныве из тела запроса и декодирует их в нормальный текст:
srr>Огромное спасибо
srr>я еше чуть подрпавил способ извлечения даных из POST запроса, а то с прямым использованием getInputStream могут как выяснилось возникнуть проблемы при закрытии потока. srr>Короче кому интерсно вот итог — достате даныве из тела запроса и декодирует их в нормальный текст:
srr> BufferedReader bf= request.getReader();
srr> String tf=null; srr> String fromServer=""; srr> while((tf=bf.readLine())!=null) srr> fromServer+=tf;
srr> fromServer = URLDecoder.decode(fromServer);
srr> System.out.println(fromServer);
Был рад помочь.
Единственное, что хочу добавить — метод URLDecoder.decode(String) обьявлен как deprecated, вместо него следует использовать URLDecoder.decode(String, String), где второй параметр определяет кодировку. В твоем случае — UTF-8
Giving up smoking is the easiest thing in the world. I know because I've done it thousands of times. (c) Mark Twain