JSP : Transfert de variables [Résolu]

Signaler
Messages postés
13
Date d'inscription
mercredi 27 mars 2002
Statut
Membre
Dernière intervention
23 avril 2010
-
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
-
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

3 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
99
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
Messages postés
13
Date d'inscription
mercredi 27 mars 2002
Statut
Membre
Dernière intervention
23 avril 2010

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();
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
99
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