Запись данных сообщения от одного сервлета Java до другого

Вот чистая версия на основе lodash, которая работает с вложенными объектами

/**
 * Sort of the keys of an object alphabetically
 */
const sortKeys = function(obj) {
  if(_.isArray(obj)) {
    return obj.map(sortKeys);
  }
  if(_.isObject(obj)) {
    return _.fromPairs(_.keys(obj).sort().map(key => [key, sortKeys(obj[key])]));
  }
  return obj;
};

. Было бы даже более чистым, если бы у lodash был метод toObject() ...

9
задан denny 18 September 2008 в 20:06
поделиться

4 ответа

Такого рода вещь является намного более легким использованием библиотеки как HttpClient. Существует даже пример кода XML сообщения:

PostMethod post = new PostMethod(url);
RequestEntity entity = new FileRequestEntity(inputFile, "text/xml; charset=ISO-8859-1");
post.setRequestEntity(entity);
HttpClient httpclient = new HttpClient();
int result = httpclient.executeMethod(post);
13
ответ дан 4 December 2019 в 08:35
поделиться

Не забывайте использовать:

connection.setDoOutput( true)

если Вы предназначаете при отправке вывода.

2
ответ дан 4 December 2019 в 08:35
поделиться

Я рекомендую использовать Apache HTTPClient вместо этого, потому что это - более хороший API.

Но решить эту текущую проблему: попытайтесь звонить connection.setDoOutput(true); после открытия соединения.

StringBuilder sb=  new StringBuilder();
sb.append("Hello there");

URL url = new URL("theservlet's URL");
HttpURLConnection connection = (HttpURLConnection)url.openConnection();                
connection.setDoOutput(true);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Length", "" + sb.length());

OutputStreamWriter outputWriter = new OutputStreamWriter(connection.getOutputStream());
outputWriter.write(sb.toString());
outputWriter.flush();
outputWriter.close();
8
ответ дан 4 December 2019 в 08:35
поделиться

Содержание потока загрузки сообщения HTTP и механика его, кажется, не то, чем Вы ожидаете, что они будут. Вы не можете только записать файл как содержание сообщения, потому что POST имеет очень определенные стандарты RFC о том, как данные, включенные в запрос POST, как предполагается, отправляются. Это не просто отформатированное из самого содержания, но и это - также механик того, как это "записано" в outputstream. Много времени POST теперь записано в блоках. При рассмотрении исходного кода HTTPClient Apache, Вы будете видеть, как он пишет блоки.

Существуют причуды с длиной содержания как результат, потому что длина содержания увеличена небольшим числом, определяющим блок и случайную маленькую последовательность символов, которая разграничивает каждый блок, как это записано по потоку. Посмотрите на некоторые из других методов, описанных в более новых версиях Java HTTPURLConnection.

http://java.sun.com/javase/6/docs/api/java/net/HttpURLConnection.html#setChunkedStreamingMode (интервал)

Если Вы не знаете то, что Вы делаете и не хотите изучать это, имея дело с добавлением зависимости как Apache, HTTPClient действительно заканчивает тем, что был намного легче, потому что это абстрагирует всю сложность и просто работает.

2
ответ дан 4 December 2019 в 08:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: