Javache Custom Server - Проблем с WatchService, Handler reaload и Summer Framework
Здравейте,
Поста ми е насочен основно към Иво Желев и задочната дискусия, която се получи в Sli.do по време на последната лекция на 21.02.2018.
Тъй като броя на символите в Sli.do са ограничени беше трудно да опиша на кратко проблема и съответно да бъда разбран.
Проблема който описах се отнася за DispatcherSolet-a и inoveka на controllerActionPair.
Прилагам моята леко модифицирана верися на сървъра, в която използвам WatchService (спрямо допълнителното условие Dicrectory Monitoring от Hand-made Server Exercise 2).
https://github.com/yvelikov/Java-Web-Fundamentals/tree/master/10.Introduction%20to%20MVC%20-%20Exercise
В този случай handler-те и съответно summer framework-а се презареждат само когато има промяна на файловете в съответната директория. В сървъра от LiveDemo-то това се случва на всеки 10 сек без значение дали има промяна или не.
Проблема, за който исках да обърна внимание, че когато в контролера имаме следния метод или друга вариация на заявка с параметри:
@GetMapping(route = "/delete/{id}") public String delete(@PathVariable int id){ System.out.println(id); return "template:delete"; }
сървъра генерира response само при първата подадена заявка ( примерно http://localhost:8000/delete/5). Ако заявката се промени на http://localhost:8000/delete/10, сървъра гърми с грешка java.lang.IllegalArgumentException: wrong number of arguments и съотвтно не изпраща response. Както се опитах да обясня в Sli.do този проблем на LiveDemo-то не се забелязва, защото handler-те се презареждат постоянно.
По приницп не мислех да задълбавам, но след като стигнахме до сесиите и там се оказа, че ако презареждаме handler-те постоянно на практика нямаме сесия, то ще се сблъскаме с този проблем отново.