4 votes

Est-il possible d'appeler une servlet à partir de css ?

J'essaie de déplacer toutes les images stockées dans le dossier de l'application web vers une base de données. Et de les appeler avec une servlet. Est-il possible d'appeler une servlet à partir de mon css ? ou existe-t-il un moyen d'appeler un fichier image stocké à distance à partir de css ?

J'ai essayé d'appeler une méthode de servlet à partir de CSS, mais sans succès. Est-il possible d'appeler une méthode de ce type ?

background-image : url(servlet/com.abc.servlet.GetImage?name=home&GetImage('abc','123')) ;

5voto

Kobi Points 65357

Oui. Tant que les images ont des url, vous pouvez les utiliser dans votre css.

Par exemple :

background-image:url('/getimage.ashx?id=3');

Vous pouvez même aller un peu plus loin et rerouter leurs urls - vous pouvez même utiliser les mêmes urls que vous avez aujourd'hui, mais en faisant en sorte que votre serveur gère la demande et le chargement des fichiers à partir de la base de données.

Autre conseil : veillez à définir les bons en-têtes. Vous voulez utiliser le bon type de contenu et vous voulez probablement que les images soient mises en cache correctement du côté client.

5voto

Pekka 웃 Points 249607

Oui. Une règle CSS qui spécifie une image peut contenir tout type d'URL que le navigateur peut analyser et récupérer :

body { 
 background-image:
 url(http://www.domain.com/servlets/my_servlet.jsp?argument=value)
}

2voto

BalusC Points 498232

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X