JSP : Transfert de variables

Résolu
cs_Moussetique Messages postés 13 Date d'inscription mercredi 27 mars 2002 Statut Membre Dernière intervention 23 avril 2010 - 23 avril 2010 à 14:57
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre 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
A voir également:

3 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
23 avril 2010 à 15:16
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
3
cs_Moussetique Messages postés 13 Date d'inscription mercredi 27 mars 2002 Statut Membre Dernière intervention 23 avril 2010
23 avril 2010 à 15:46
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();
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
23 avril 2010 à 16:02
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
0
Rejoignez-nous