Можно ли записать текст на веб-страницу после ее загрузки?

Помимо написания очень странного аспекта я не верю, что есть способ. Это цена, которую вы платите за использование метода static, который вы не можете изменить.

Я бы посмотрел на массовое изменение, используя ваши любимые инструменты IDE или командной строки, например. sed. Если вы хотите изменить все вхождения {0} в {0,number,#}, этого должно быть достаточно, чтобы

sed -i -e 's/{0}/{0,number,#}/g' MyClass.java
3
задан 19 January 2019 в 18:28
поделиться

1 ответ

Может ли сервер записывать текст на веб-страницу после ее загрузки? Да, это определенно так, но в наши дни я подозреваю, что это делается редко. Я начал веб-разработку в 1990-х годах, и тогда это было довольно распространенным методом. Мы использовали его для написания сообщений чата в браузерах без Javascript. В наши дни Javascript является вездесущим и мощным, поэтому использование клиентского Javascript для обновления страницы будет лучшим вариантом в большинстве случаев.

Тем не менее, технологии, которые мы использовали для написания серверных обновлений, должны работать. Я подозреваю, что причина того, что вы не видите обновления в вашем браузере, заключается в том, что он не знает, что должен начать показывать страницу до того, как все загрузится. Использование chunked Transfer Encoding , технологии 1990-х, все еще поддерживаемой современными браузерами, должно решить эту проблему. Это позволяет серверу указывать, когда «чанка» данных завершена, и браузеры обычно обрабатывают каждый чанк немедленно, а не ожидают прибытия всех чанков.

Самый простой способ использовать chunked Transfer Encoding - это использовать HTTP-библиотеку, подобную Apache HttpComponents , а затем обернуть ваш выходной поток в соответствующий класс:

final var socket = new java.net.ServerSocket(1234);
for (;;)
{
  try (final var client = socket.accept())
  {
    var outputStream = new ChunkedOutputStream(client.getOutputStream());
    outputStream.write("HTTP/1.1 200 OK\r\n\r\n".concat(java.time.Instant.now().toString()).getBytes());
    outputStream.flush();
    Thread.sleep(1000L);
    outputStream.write("And another paragraph.".getBytes());
  }
}
0
ответ дан gutch 19 January 2019 в 18:28
поделиться
Другие вопросы по тегам:

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