Spring MVC Image Contrôleur d'affichage de l'Image en Octets en JSP
J'ai un Spring MVC de l'application, et l'une des pages Jsp doivent afficher les images provenant d'une base de données.
Les images sont stockées dans la base de données comme des Gouttes.
Quelle est la meilleure façon de les afficher? Quel genre de servlet/contrôleur dois-je montrer sur la JSP de l'image en octets? Devrait être une question facile, mais je n'ai pas été en mesure de trouver une solution complète de n'importe où.
Ma compréhension est que j'ai besoin d'un contrôleur séparé, dire ImgController/id=, ce qui permet d'afficher l'image en octets basé sur un paramètre de la requête, et puis, dans ma JSP je peux img src="ImgController/id...". Mais comment puis-je mettre en œuvre et de fil de ce contrôleur?
De l'aide ou des exemple serait vraiment apprécié. Merci beaucoup.
- Une solution simple que j'ai trouvé est d'avoir une simple Servlet (pas un Contrôleur MVC, mais juste un HttpServlet) pour servir de l'image, en fonction de la demande param (ID). Toutefois, dans ce cas, nous allons à l'extérieur du Conteneur spring mvc, et automatique DB accès est hors de portée. Donc je l'ai mis dans la Session, un HashMap (ID->Blob) qui est définie à partir de quelques Contrôleur spring mvc qui ont accès à la DB. Avec cet attribut de session publiquement disponibles, la ImgServlet pouvez obtenir les octets sans passer par la DB. Elle fonctionne. Mais une bonne spring mvc solution serait sympa.
- Vous prévoyez sur l'utilisation de Spring MVC annotations ou de prolonger l'un des obsolète classes dans org.springframework.web.servlet.mvc comme AbstractController?
Vous devez vous connecter pour publier un commentaire.
La solution la plus simple (en termes donc écrire le moins possible) est un Spring MVC Méthode de Contrôleur avec le retour de Type OutputStream ou ResponseEntity.
Que je préfère: le retour d'un ResponseEntity:
Mais il y a beaucoup plus:
Utilisation HttpServletResponse directement
J'ai compilé un code ici!
Jetez un oeil et laissez-moi savoir si cela correspond à votre cas. Je pense que cela devrait fonctionner.