IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Servlets/JSP Java Discussion :

Appeler une JSP ou SERVLET alors que la response est "commited"


Sujet :

Servlets/JSP Java

  1. #1
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 40
    Par défaut Appeler une JSP ou SERVLET alors que la response est "commited"
    Bonjour ,

    Comment peut on appeler une Servlet ou une JSP quand la response de la servlet appelante est "commited" ?? ( je la commite car je suis obligée d'envoyer a l'utilisateur un flot de données texte )

    Si quelqu'un a une idée ca me serait d'un grande aide , merci !!

  2. #2
    Membre émérite
    Avatar de yolepro
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 918
    Par défaut
    Bonjour japz,

    Je ne comprends pas ton besoin de commiter la response alors que tu dis explicitement que dans cette response tu veux envoyer un Flux de données.
    La response c'est justement le flux de retour.

    Montre nous concretement ce que cela donne.

  3. #3
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 40
    Par défaut
    Pour mieux decrire le probleme :

    J'ai une servlet qui sert a forcer le telechargement d'un fichier texte.
    Pour ce faire je change le "content type" de la "response " = (application/attachment) , je charge mes données dans le Servlet outputstream et je flush le servletoutputstream ce qui declenche le téléchargement.
    Apres , dans la meme servlet je voudrais appeler une jsp.
    Je ne peux pas car ma response est "commited".

  4. #4
    Membre chevronné Avatar de florentB
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2006
    Messages : 332
    Par défaut
    Une idée en passant : en le faisant avec un thread, je pense que c'est faisable, et comme ca tu peux faire ton redirect ensuite. Si je dis une connerie, n'hésitez pas à me le dire ...

  5. #5
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 40
    Par défaut
    Excuses mon ignorance mais Qu'est ce qu'un thread ?

  6. #6
    Membre chevronné Avatar de florentB
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2006
    Messages : 332
    Par défaut
    Un thread est un processus indépendant. Ici, l'intérêt, c'est qu'en lancant un nouveau Thread (processus), tu peux lancer un traitement à coté, sans "pourrir" celui en cours (celui de ta servlet pour faire la redirection).

  7. #7
    Membre émérite
    Avatar de yolepro
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 918
    Par défaut
    Citation Envoyé par japz
    je charge mes données dans le Servlet outputstream et je flush le servletoutputstream ce qui declenche le téléchargement.
    Ce qui déclenche le telechargement ca n'est pas le flush.
    mais le fait d'envoyer l'output vers la sortie.

    Quel pourrait etre l'utilité de renvoyer ensuite vers une JSP ?

    A quoi servirait cette JSP?

  8. #8
    Membre émérite
    Avatar de yolepro
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 918
    Par défaut
    Montre nous la cinématique exacte avec les ecrans ca sera beaucoup plus simple pour t'aider.

  9. #9
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 40
    Par défaut
    La cinematique est tre simple : Une page JSP appelante , avec un choix d'options pour le téléchargement ( avec des controles sur ces choix en javascript ) , un bouton valider qui appelle la servlet qui génére le téléchargement.
    Je veux appeler une JSP en retour de la servlet car avec certains navigateurs le javascript dans la page appelante ne fonctionne plus lorsqu'on execute la servlet ( pour une raison mysterieuse ) : On en peut pas faire 2 fois de suite le téléchargement.
    Pour l'instant , j'ai bricolé pour contourner le probleme : A l'appel de la servlet j'efface le formulaire de ma page appelante en javascript --> l'utilisateur est obligé de cliquer sur un lien pour réafficher la page s'il veut faire une 2eme demande de telechargement.
    Mais je prefererais faire ca proprement.

  10. #10
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 40
    Par défaut
    Le code de la servlet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    import fr.secf.ejb.compteProfessionnel.SessionTransfert;
    import fr.secf.ejb.compteProfessionnel.SessionTransfertHome;
     
     
     
    public class ServletOut extends ServletEJBSession implements Servlet {
     
    	public SessionTransfert beanSession;
     
    	public void doService(HttpServletRequest request, HttpServletResponse response)throws Throwable
    	{
    		HttpSession session = request.getSession();
    		this.miseAJour(request);
    		String vide = " "; 
    	    // Génération des données 
    		SessionTransfertHome home = (SessionTransfertHome) CacheEJB.getInstance().getHome("ejb/fr/secf/ejb/compteProfessionnel/SessionTransfertHome",SessionTransfertHome.class);
    		beanSession = home.create(); 
    		Conversions conv = new Conversions() ;
    		// Conversion des dates 
     
    		String debut = request.getParameter("debut"); 
    		Date dtdeb = conv.dateJourMoisAnnee(debut);
    		String deb  = conv.texteAnneeMoisJour(dtdeb);
     
    		String lafin = request.getParameter("fin");
    		Date dtfin = conv.dateJourMoisAnnee(lafin);
    		String fin = conv.texteAnneeMoisJour(dtfin);
     
     
    		String prise = "Votre demande de trasnfert a bien été prise en compte" ;
    		String login = (String) session.getAttribute("login");
    		ArrayList liste = beanSession.creationFichier(login , deb , fin);
     
    		if (liste.size()>0 ) 
    		{
     
    //		 Transfert 
    		String file = login+deb+fin+".txt" ;
     
    //		on renseigne le type de contenu. J'ai mis "unknown/unknown", ce qui permet de downloader
    		// n'importe quel type de fichier, mais on peut aussi mettre "application/pdf" pour downloader
    		//uniquement des pdf, ou "application/msword" pour des fichiers Microsoft Word, etc.
    		response.setContentType ("unknown/unknown");
     
     
    		//on renseigne l'entete, en précisant quel sera le nom de fichier proposé à l'utilisateur pour
    		// l'enregistrement sur son disque dur. Ici je lui propose le nom d'origine du fichier.
    		response.setHeader ("Content-Disposition", "attachment; filename=\"" + file + "\"");
     
     
    		ServletOutputStream outs = response.getOutputStream();
     
     
    		String test = " " ; 
    		int i = 0 ; 
    		while (i<liste.size())
    		{
    		Resultats result = (Resultats) liste.get(i);
    		test = result.getNomCheval() + " | " +
    		result.getPlace() + " | " +
    		result.getMonteCheval() + " | " +
    		result.getProdef()+ " | "  ; 
     
    		outs.println(test);
     
    		i++ ;
    		}
     
    	    outs.flush();
    	    outs.close();
     
    	}
    	else
    	{
    		request.getRequestDispatcher("/CompteProfessionnel/PageHtml/choixDatesTransfert.jsp?vide=O").forward(request,response);
    	}
    	}
     
    }

  11. #11
    Membre émérite
    Avatar de yolepro
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 918
    Par défaut
    Bonjour,

    Ton problème ne semble pas venir de ta Servlet mais bien de l'appelle qui en est fait.

    Pourquoi ne fais tu pas un appelle de lien via une ouverture de popup qui pointe sur ta servlet(window.open)?

  12. #12
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 40
    Par défaut
    Qu'est ce que cela changerait ?

  13. #13
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 40
    Par défaut
    Peut etre qu'il est impossible de poursuivre le traitement quand la response est "commited".
    Apres toutes les recherches que j'ai faites il semble que seule une action de l'utilisateur peut lancer une nouvelle requete.

  14. #14
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 40
    Par défaut
    En tous cas merci pour ton aide yolepro.

Discussions similaires

  1. Appeler une JSP à partir d'une JSP
    Par fessebleu dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 23/02/2011, 01h07
  2. Servlet qui appelle une jsp
    Par mouss4rs dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 29/09/2010, 10h44
  3. Réponses: 7
    Dernier message: 02/07/2007, 16h06
  4. Appeler une Applet ou servlet depuis une classe java
    Par oussam dans le forum Applets
    Réponses: 2
    Dernier message: 04/07/2006, 13h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo