C'est possible. Il suffit de créer un imageservlet comme cet exemple ici. Pour aller droit au but, il suffit d'obtenir l'image comme InputStream
de DB par ResultSet#getBinaryStream()
et l'écrire dans le OutputStream
de la réponse obtenue par HttpServletResponse#getOutputStream()
le site la manière habituelle de Java IO . N'oubliez pas d'ajouter les en-têtes HTTP content type et content length. Si vous omettez le type de contenu, le navigateur ne sait pas quoi faire de l'information. Si vous omettez la longueur du contenu, les données seront envoyées avec un encodage de transfert par morceaux, ce qui est un peu moins efficace.
Pour ce qui est de référencer le servlet dans le fichier CSS, il suffit de spécifier l'URL. relatif au fichier CSS. De cette façon, vous n'avez pas à vous soucier du chemin d'accès au contexte. Déterminer l'URL relative n'est pas si difficile, cela fonctionne de la même manière que pour accéder aux chemins du système de fichiers du disque local dans la console de commande. cd ../../foo/bar/file.ext
et ainsi de suite. Vous avez déjà appris ça à l'école, oui ?
OK, supposons que l'imageservlet est situé à http://example.com/context/image?id=x
et que le fichier CSS est situé à http://example.com/context/css/globalstyle.css
(ainsi, le dossier actuel est css
), l'URL relative correcte vers l'imageervlet à partir du fichier CSS serait la suivante :
background-image: url('../image?id=123');
En ../
recule d'une étape dans la structure du répertoire de sorte que vous passez du dossier http://example.com/context/css
a http://example.com/context
. Si vous avez toujours du mal à trouver le bon chemin relatif, faites-nous part de l'adresse suivante absolu de la servlet et du fichier CSS, puis nous extrairons le chemin relatif correct pour vous.