Возможно ли отправить response без запроса?

165
27 июня 2017, 22:12

Серверная часть на java, необходимо оповестить пользователя о событии на сервере и поменять кое-что на странице. В модели запрос ответ кажется нет такой возможности? У меня много пользователей (5-100) подключены к jsp странице при этом только один из них делает какие-то изменения (немного js) и остальные должны это увидеть в своих браузерах на той-же странице. Я могу средствами Java Servlet API решить эту задачу учитывая что объем обновляемых данных очень маленький строка из 2-ух символов. Или есть какие-то некостыльные способы решать эту задачу?

Answer 1

Да, это возможно. Вам следует использовать механизм веб-сокетов, он позволяет отправлять данные на клиентскую часть без запроса с неё на сервер. Попробуйте для начала запустить этот пример, а затем приспособить его под свои задачи. Я вижу решение примерно таким:

  • При открытии каждым пользователем страницы, создаётся веб-сокет и регистрируется на сервере;
  • После внесения изменений серверная часть отсылает всем активным веб-сокетам некий сигнал, при получении которого в браузере, например, просто обновляется страница (либо выполняются другие нужные вам действия). "поменять кое-что на странице" можно будет JavaScript-ом.
  • Не забывайте закрывать не используемые веб-сокеты, например, при получении сигнала закрытия сессии пользователя. Вот пример слушателя событий сессий.

Готового решения с кодом дать не могу, т.к. у меня его нет, но Вы можете задавать на SO новые вопросы по возникающим проблемам.

Answer 2

Другими словами вам нужен "триггер". Если вы используете Spring в качестве фреймворка аннотация @Schedule(cron = "* * * * * *") поможет. Отправляете пачку данных джейсоном и со стороны js изменяете страницу с помощью ajax или можете к примеру использовать angularJS. Сама JSP не может изменяться динамически так как это страница которая формируется на сервере. Но вы можете добавить ajax запросы к JSP и тогда парсить вручную джейсон который приходит и вставлять в уже сгенерированный html (jsp). Но так же, если вам нужно переодически как-то изменять UI взависимости от действий на сервере и отправлять запрос, можете использовать JavaRX.

READ ALSO
maven & IntelliJ IDEA & no main manifest attribute

maven & IntelliJ IDEA & no main manifest attribute

Нашёл в google не десяток аналогичных вопросов, и везде (практически) советуют одно и тоже - добавить код ниже в pomxml:

302
Как в jsch отправить команду Enter?

Как в jsch отправить команду Enter?

Пишу программку подключения и выполнения команды в linux на Java с библиотекой jsch в ходе, которой она просит нажать Enter с клавиатурыКак можно выполнить...

220
Как правильно повернуть календарь?

Как правильно повернуть календарь?

Я не уверен, что мой подход правильный может есть другая идея?

256
Переписать методы toString

Переписать методы toString

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

289