Никак не могу решить проблему. Каждый раз вызывается метод getCatalogs() с клиента.
Также интересно, что данные, которые должны передаваться по одному, передаются разом.
Т.е. сразу на клиент приходит 4 строки из цикла и строка, которая идет после цикла.
В логах сервера и в браузере показывает что постоянно происходит вызов метода getCatalogs().
@GetMapping("/getcatalogs")
public SseEmitter getCatalogs() throws IOException
{
String url="https://market.yandex.ru/catalog--elektronika/61590?hid=198119";
Document document = Jsoup.connect(url).get();
Elements elements = document.select(".egKyN._2jA_3._3a7xr");
List<Element> elems = elements.stream().toList();
if(elems.size()>4)
elems=elems.subList(0, 4);
final List<Element> elems2 = elems;
logger.info("elems2:"+elems2.size());
ExecutorService executor = Executors.newCachedThreadPool();
SseEmitter emitter = new SseEmitter();
executor.execute(()->
{
try
{
for(Element el:elems2)
{
String s = el.text()+" - "+el.attr("href");
emitter.send(s);
}
emitter.send("The parsing of the catalogs list is completed ");
}
catch(IOException ex)
{
emitter.completeWithError(ex);
}
finally
{
emitter.complete();
}
});
return emitter;
}
<script>
$('#parser_start').on('click', function() {
$(this).prop("disabled", true);
url = $('#catalog_url').val();
//url="/SpringMvc/parser/getcatalogs";
var sse = new EventSource(url);
sse.onmessage = function (evt) {
var el = document.getElementById('result');
el.appendChild(document.createTextNode(evt.data));
el.appendChild(document.createElement('br'));
};
});
</script>