JSP : Transfert de variables [Résolu]

Messages postés
13
Date d'inscription
mercredi 27 mars 2002
Statut
Membre
Dernière intervention
23 avril 2010
- - Dernière réponse : cs_DARKSIDIOUS
Messages postés
15815
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
- 23 avril 2010 à 16:02
Bonjour.

Petit problème de variable :

Voila le JAVA :

    Map reponse = new HashMap();
    reponse.put("fileName", "monfichier.txt");
    reponse.put("data", "dddddddddddddddddddddddddddddddd");
return new ModelAndView(Constantes.JSP_DOWNLOAD, Constantes.JSP_REPONSE, reponse);


Voila le JSP :


<% fileName = pageContext.getAttribute("fileName"); %>


<% response.setHeader("Content-Disposition", "attachment; filename="+fileName); %>
<c:out value="${reponse.data}" escapeXml="false"/>


Le fichier est bien proposé en téléchargement, mais avec un nom égale à "null"...

Mon problème se situe donc au niveau de la variable filename. Comment "composer" mon header avec une variable passée par un objet ModelAndView?

Merci de votre aide :)
Pierre
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
15815
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
84
3
Merci
Salut,

Pourquoi donc utiliser une jsp pour envoyer un fichier ??? Envoie le directement à partir de ta servlet, ce sera bien plus optimisé.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 191 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_DARKSIDIOUS
Messages postés
13
Date d'inscription
mercredi 27 mars 2002
Statut
Membre
Dernière intervention
23 avril 2010
3
Merci
Ok merci. Je pensais que la façon la plus "propre" était la JSP.

Si ça peut servir voila donc mon code qui fonctionne.

Thx DARKSIDIOUS

response.setHeader("Content-Description","File Transfer");
response.setHeader("Content-Type","application/octet-stream");
response.setHeader("Content-Disposition","attachment; filename=""+fileNameClean+""");
response.setHeader("Content-Transfer-Encoding","binary");
response.setHeader("Expires","0");
response.setHeader("Cache-Control","must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma","public");


File file = new File(Constantes.DESTINATION_DIR_PATH+f.getNom());
FileInputStream fileIn = new FileInputStream(file);
ServletOutputStream out = response.getOutputStream();
 
byte[] outputByte = new byte[4096];

//copie du binaire vers le stream de sortie
while(fileIn.read(outputByte, 0, 4096) != -1)
{
out.write(outputByte, 0, 4096);
}

fileIn.close();
out.flush();
out.close();

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 191 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Moussetique
Messages postés
15815
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
84
0
Merci
Salut,

Le plus propre, dans une application j2ee, c'est d'avoir le moins de jsp possible, et le strict minimum dans les page jsp : les balises html et les taglibs : pas de code java, de code javascript ou de style css dans une jsp : les mettre dans des fichiers à part.

Un jsp est interprêtée pour faire une classe, qui sera elle même compilée pour être exécutée par le serveur d'application. Donc plus la jsp est lourde, plus ca prendra de temps à interprêter, puis compiler et enfin, exécuter...

Une servlet quant à elle est juste exécutée (elle est déjà compilée une fois déployée sur le serveur d'application), donc gain de temps. De plus, la servlet peut très facilement être debugguée (essaye de debugguer une page jsp, tu vas voir comment tu vas te marrer !).

Donc la règle d'or d'un projet J2EE : PAS DE CODE JAVA dans les jsp, et jsp utilisée UNIQUEMENT pour formatter la page HTML finale, c'est tout.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Commenter la réponse de cs_DARKSIDIOUS