È necessario capire come funziona HTTP. Quando il browser carica una pagina all'URL
http://some.host/myWebApp/foo/bar.html
e la pagina HTML contiene
<img src="images/test.png"/>
il browser invierà una seconda richiesta HTTP al server per caricare l'immagine. L'URL dell'immagine, poiché il percorso è relativo, sarà http://some.host/myWebApp/foo/images/test.png
. Si noti che il percorso assoluto è composto dalla "directory" corrente della pagina, concatenata con il percorso relativo dell'immagine. Il percorso del JSP lato server o del template thymeleaf è completamente irrilevante qui. Ciò che conta è l'URL della pagina, come visualizzato nella barra degli indirizzi del browser. Questo URL è, in una tipica applicazione MVC di primavera, l'URL del controller in cui è stata inviata la richiesta iniziale.
Se il percorso dell'immagine è assoluto:
<img src="/myWebApp/images/test.png"/>
allora il browser invierà una seconda richiesta all'URL http://some.host/myWebApp/images/test.png
. Il browser inizia dalla radice del server Web e concatena il percorso assoluto.
Per poter fare riferimento a un'immagine, indipendentemente dall'URL della pagina, un percorso assoluto è quindi preferibile e più facile da utilizzare.
Nell'esempio precedente, /myWebApp
è il percorso di contesto dell'applicazione, che in genere non si desidera codificare nel percorso, poiché potrebbe cambiare. Per fortuna, secondo lo thymeleaf documentation, thymeleaf lo capisce e fornisce una sintassi per i percorsi relativi al contesto, che quindi trasforma percorsi come /images/test.png
in /myWebApp/images/test.png
. Così la vostra immagine dovrebbe essere simile
<img th:src="@{/images/test.png}"/>
(non ho mai usato thymeleaf, ma è quello che deduco dalla documentazione).
E l'immagine test.png
deve quindi trovarsi in una cartella images
situata nella radice della webapp.