Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2761 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  j2ee : le serveur perd la main...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

j2ee : le serveur perd la main...

n°1766827
peter27x
Posté le 30-07-2008 à 17:13:18  profilanswer
 

d'abord voici le code:
 
   try {
    String theReportFile = prenomCollab+"_"+nomCollab +"_"+mois+"_"+mcSession.getAnnee()+".xls";
    out = response.getOutputStream();
    response.setContentType ("application/octet-stream" );
    response.setHeader ("Content-Disposition", "attachment; filename=\""+theReportFile+"\"" );
    wb.write(out);
    out.close();
   } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   
   
   if (cnx != null) {
    cnx.close();
    cnx = null;
   }
  } catch (NamingException e) {
   e.printStackTrace();
  } catch (SQLException e) {
   e.printStackTrace();
  }
 
  return mapping.findForward("imprimerOK" );
 }
 
Maintenant, le pb:
 
arrivé au return maping final, l'appli est dans les choux... tomcat ne sait plus où il habite... il semble que ça vienne de la gestion du response.getOutputStream... plus precisement du out.close...
 
d'ailleurs, dans les messages de la console tomcat, il nous indique que le getOutputStream a déjà été utilisé, cela semble le deranger, mais nous ne voyons absolument pas à quel autre endroit du projet cela aurait deja été fait...
 
a noter que tout le reste fonctionne, on recupere bien les infos envoyées par le serveur, c'est juste qu'ensuite il ne peut plus faire de redirection de page...
 
Avez vous une idée ?

mood
Publicité
Posté le 30-07-2008 à 17:13:18  profilanswer
 

n°1766829
Bidem
Posté le 30-07-2008 à 17:22:33  profilanswer
 

Code :
  1. out = response.getOutputStream();
  2. wb.write(out);
  3. ...
  4. return mapping.findForward("imprimerOK" );
 

Donc là tu écrit dans la réponse un contenu binaire, puis tu fais un forward vers une autre page.

 

Mais réfléchis où donc est ce que ton autre page va essayer d'écrire ?
et oui, dans la réponse.

 

c'est pendant le traitement de imprimerOK que tu as le IllegalStateException

 

donc vu qu'une requêtes http ne peut avoir qu'une réponse, si tu écris directement dans la response, tu ne peux pas faire de forward

 

le code devient :

 
Code :
  1. out = response.getOutputStream();
  2. wb.write(out);
  3. ...
  4. //return mapping.findForward("imprimerOK" );
  5. // Avec Struts, si tu ne veux pas forwarder la requêtes , il suffit de retourner null
  6. return null;


Message cité 1 fois
Message édité par Bidem le 31-07-2008 à 10:07:20
n°1766842
peter27x
Posté le 30-07-2008 à 17:39:29  profilanswer
 

Bidem a écrit :

Code :
  1. out = response.getOutputStream();
  2. donc vu qu'une requette http ne peut avoir qu'une réponse, si tu écris directement dans la response, tu ne peux pas faire de forward
  3. return null;




 
Ok, merci pour les infos !
 
I incline myself.  :jap:  
 
Par contre... comment faire pour à la fois pouvoir envoyer le fichier au client, et malgré tout pouvoir faire un "forwardage" de requête ?
 
Merci.

n°1767136
Bidem
Posté le 31-07-2008 à 09:39:23  profilanswer
 

il faut que le client (navigateur) fasse 2 requêtes :
 - une requêtes pour le fichier
 - une requêtes pour l'enchainement de page

Message cité 1 fois
Message édité par Bidem le 31-07-2008 à 10:06:48
n°1767142
peter27x
Posté le 31-07-2008 à 09:48:29  profilanswer
 

Bidem a écrit :

il faut que le client (navigateur) fasse 2 requettes :
 - une requette pour le fichier
 - une requette pour l'enchainement de page


 
L'ennui, c'est struts... car le bouton dans la page JSP est codé en "struts", comme suit:
 
<html:submit title="Crée le fichier Excel du collaborateur sélectionné" property="typeAction">
    <bean:message key="menuCollabs.imprimer" />  
   </html:submit>
 
Du coup comment lui faire faire DEUX requêtes ?
 
...  :cry:

n°1767146
Bidem
Posté le 31-07-2008 à 10:08:49  profilanswer
 

Elle doit faire quoi ta 2ème requêtes ?

n°1767156
peter27x
Posté le 31-07-2008 à 10:33:26  profilanswer
 

Bidem a écrit :

Elle doit faire quoi ta 2ème requêtes ?


 
La première requête permet l'envoi du fichier ZIP par le serveur, envoi clôturé par le fameux out.close().
 
La deuxième requête serait censée redonner au serveur un accès au navigateur client (à son "response" ) afin que le serveur puisse s'en servir pour rediriger le client vers une autre page JSP (du style "téléchargement terminé" )...

n°1767165
brisssou
8-/
Posté le 31-07-2008 à 10:47:32  profilanswer
 

et si tu fais l'inverse, genre ce qu'on voit sur sourceForge, et bien d'autres :
tu rediriges vers une page qui dit "votre téléchargement va débuter sous peu, ou cliquez là" et qui elle lance le DL ?

Message cité 1 fois
Message édité par brisssou le 31-07-2008 à 11:27:54

---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
n°1767174
peter27x
Posté le 31-07-2008 à 10:58:16  profilanswer
 

brisssou a écrit :

et si tu fais l'inverse, genre ce qu'on voit sur sourceForge, et bien d'autre :
tu rediriges vers une page qui dit "votre téléchargement va débuter sous peu, ou cliquez là" et qui elle lance le DL ?


 
Hum..., idée à creuser en effet...  :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  j2ee : le serveur perd la main...

 

Sujets relatifs
Lecture de mes fichiers PHP dans mon serveur FTPFaire un Cron sur un serveur ftp tout les jours
problème de requête - FREETEXTTABLE (SQL serveur)Création d'un serveur de ping
Problème : Requetes SQL Serveur liés à Access[J2EE] Daemons
[PHP]Recuperer l'ip d'un client connecté sur un serveur socket.Script SFTP entre 2 serveur windows
Upload script PHP => serveur FTPserveur mmorpg php
Plus de sujets relatifs à : j2ee : le serveur perd la main...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR