Affichage de plusieurs images de type blob dans la page jsp

Fermé
ParkYu Messages postés 1 Date d'inscription vendredi 15 novembre 2019 Statut Membre Dernière intervention 15 novembre 2019 - 15 nov. 2019 à 07:57
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 15 nov. 2019 à 13:08
Bonjour, je suis débutante en programmation Java EE et j'ai quelques questions.

Mon application web peut contenir des images dans la base de données avec d'autres informations comme le nom, prenom.
L'upload se déroule très bien, mais c'est dans l'affichage que j'ai des problèmes. J'ai voulu stocker les images récupéré depuis la base de données dans un getteur de type liste que je voulais ensuite afficher dans ma page jsp mais lors de l'appel dans la page jsp, une seule photo seulement apparait et mais pas ma page contenant la vue.
Voici un extrait de mon code :

Tout d'abord dans une classe Image_upload :
private List<Blob> image= new ArrayList<Blob>() ;
private List<String> sujet= new ArrayList<String>() ; 
public void getImage(){
	        
		try{
			Connection con=DB.getConnection() ;
			PreparedStatement ps=con.prepareStatement("select image, sujet from table order by id desc limit 3 ") ;
			ResultSet rs= ps.executeQuery() ;
			while(rs.next()){
			     image.add(rs.getBlob("image")) ;	
                             sujet.add(rs.getString("sujet")) ;
			}	
		}
		catch(Exception e){
			System.out.println("erreur "+ e);
		}	
}
public void setBlob(List<Blob> blob) {
	this.image=blob ;
}
public List<Blob> getBlob() {
	return image ;
}
public void setSujet(List<String> sujet) {
	this.sujet=sujet ;
}
public List<String> getSujet() {
	return sujet ;
}


Puis dans ma servlet, j'instance cette classe et je recupère la valeur dans getteur dans la methode doget(...):
    Image_upload iu= new Image_upload() ;
    int ct=1 ;
    Blob blob1 , blob2 , blob3 ;
   try {
				iu.getImage();
				List<String> sujet= new ArrayList<String>() ;
				sujet= iu.getSujet() ;
				List<String> date= new ArrayList<String>() ;
                               for (Blob blob : image) {
					if(ct==1) {
						blob1=blob ;
						ct++ ;
						try {
							byte byteArray[] =blob1.getBytes(1, (int)blob1.length()) ;
							response.setContentType("image/png") ;
							OutpuostStream =response.getOutputStream();
							os.write(byteArray) ;
							request.setAttribute("blob1", os);
							os.flush() ;
							os.close() ;
						}
						catch(Exception e){
							System.out.println("erreur dans New.java1"+ e);
						}
					}
					if else(ct==2) {
						blob2=blob ;
						ct++ ;
						try {
							byte byteArray[] =blob2.getBytes(1, (int)blob2.length()) ;
							response.setContentType("image/png") ;
							OutputStream os=response.getOutputStream();
							os.write(byteArray) ;
							request.setAttribute("os", os);
							request.setAttribute("byteArray", byteArray);
							os.flush() ;
							os.close() ;
						}
						catch(Exception e){
							System.out.println("erreur dans New.java image2"+ e);
						}
					}
					if else(ct==3) {
						blob3=blob ;
						try {						
							byte byteArray[] =blob3.getBytes(1, (int)blob3.length()) ;
							response.setContentType("image/png") ;
							OutputStream os=response.getOutputStream();
							os.write(byteArray) ;
							request.setAttribute("blob3", os);
							os.flush() ;
							os.close() ;
						}
						catch(Exception e){
							System.out.println("erreur dans New.java image 3"+ e);
						}
					}
                                 else
                                                    System.out.println("Erreur, à revoir dans la partie blob") ;
}
catch(Exception e){
			System.out.println( e);
		}

Et voilà, je ne sais vraiment pas comment afficher ces images dans ma page jsp, j'ai essayé d'utiliser le jstl comme :
<c:out value="${blob1}"></c:out>.
<c:out value="${blob2}"></c:out>.
<c:out value="${blob3}"></c:out>. mais une image apparait au lieu de ma page+mes images
J'ai aussi essayé de le faire directement en utilisant ${blob1}, ... mais rien à faire. J'ai essayé la balise <img scr=" ${blob1}" alt=""/> mais ça n'affiche toujours qu'une seule image.

S'il vous plait, si vous avez des avis, aidez-moi.

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
15 nov. 2019 à 13:08
Bonjour,

Je pense que ton problème vient du
response.setContentType("image/png");
alors que le résultat généré par ta JSP c'est du
text/html
, de plus pour l'affichage je pense qu'il sera nécessaire que tu convertisses ton image en base 64.

Remarque : une solution plus propre serait de faire une servlet dédiée à l'affichage des images, avec une URL spécifique que le navigateur appellerait - ou non - et récupérerait uniquement l'image.
Cela donnerait une JSP moins lourde et la possibilité du navigateur de mettre l'image en cache.
0