Java + Appli web + HttpServletResponse

Fermé
vsiguier Messages postés 22 Date d'inscription vendredi 5 octobre 2001 Statut Membre Dernière intervention 19 février 2003 - 18 déc. 2001 à 14:20
 Kamel - 6 févr. 2007 à 14:14
Bonjour,

Je cherche le moyen de renvoyer au client de mon appli web une réponse (HttpServletResponse) correspondant à 2 actions :
--> telechargement de fichiers
--> rafraichissement de l'affichage ( code html généré par une JSP )

Pour l'instant je réalise la fonctionnalité du download mais je ne sais pas comment formuler en même temps le rafraîchissement de la page.

Si quelqu'un a une idée, c'est avec grand plaisir !
A voir également:

3 réponses

Salut vsiguier!

Peux-tu préciser comment fonctionne ton application stp?

Je suppose que, sur ta page Web, tu as placé un lien vers le fichier à downloader et que tu forwardes ta requête vers une servlet.

Maintenant, qu'entends-tu par "rafraîchissement"? Juste afficher un message signalant que le download est terminé? Autre chose? Précise et j'essaierai de te répondre aujourd'hui même.

;-)
0
vsiguier Messages postés 22 Date d'inscription vendredi 5 octobre 2001 Statut Membre Dernière intervention 19 février 2003
19 déc. 2001 à 09:42
Salut HackTrack !

Merci de consacrer un peu de temps à mon problème.

Pour le download tu as tout compris à savoir que l'action sur le bouton appelle une servlet qui effectue le traitement à déquate.
En ce qui concerne le rafraîchissement que je souhaite faire, avant ou après la séquence de download peu m'importe, il consiste à afficher le résultat d'une JSP que j'appelle par l'intermédiaire d'une servlet en temps normal ( cette page JSP contient le bouton de download + des informations à mettre à jour en fonction de l'action de download ).

Voilà ce que je peux te dire pour le moment, si tu as besion d'informations plus précises n'hesites pas.

Merci pour ton aide.
-1
Voici la solution à laquelle je pense pour résoudre ton problème.

Sur ton bouton html "Download", définit l'action en donnant le chemin de ta servlet:

Exemple:
<button name ="download" value="<!--chemin_et_nom_du_fichier-->" action="/servlet/DownloadServlet">Download</button>

Dans ta servlet, définit une méthode qui va effectuer le téléchargement et qui te renvoie un boolean.
Tu appelles cete méthode dans ta méthode "doPost()", "doGet()" ou "service()".
Tu ajoutes un paramètre ("download") à la réponse dont la valeur est le résultat du download(tru ou false).
Tu forwardes ta requête vers ta JSP (DownloadFeedback.jsp).
Exemple:
public void doPost(HttpServletRequest request, httpServletResponse response){
//petit truc qui permet à l'utilisateur d'utiliser la méthode POST ou GET pour accéder à la servlet
handle(request, response);
}

public void doGet(HttpServletRequest request, httpServletResponse response){
//petit truc qui permet à l'utilisateur d'utiliser la méthode POST ou GET pour accéder à la servlet
handle(request, response);
}

public void handle(HttpServletRequest request, httpServletResponse response){
.
.
.
boolean hasBeenDownloaded = download(fileToDownLoad);
.
.
.
response.addParameter("download",hasBeenDownloaded);//je ne suis pas sûr de la syntaxe et du nom de la méthode. Vérifie dans les API.
getServletConfig().getServletContext().getRequestDispatcher("/jsp/DownloadFeedback.jsp").forward(request,response);
}

private boolean download(File file){
boolean isDownloaded = false;
//insère ici ton code pour downloader le fichier;
// si le fichier est downloadé, isDownloaded prend la valeur true
// sinon il reste à false
return isDownloaded;
}


Dans ta JSP (DownloadFeedback.jsp), tu dois utiliser la directive JSP "include", qui va inclure une servlet qui générera le code HTML à afficher
en fonction de la valeur du paramètre créé ci-dessus.
<jsp:include page="/servlet/CheckDownloadServlet" flush="true" />

Dans la méthode doPost() ou doGet() de la servlet (CheckDownloadServlet)(qui ne te servira qu'à générer ta page en fonction du paramètre),
tu dois effectuer un test et générer le code différemment suivant que le paramètre est "true" ou "false".

String download = request.getSession().getParameter("download");

if(download.equals("true")){
//génére ici le code html (le download s'est bien passé)
}else{
//génére ici du code html différent (le download ne s'est pas bien passé)
}

Et voilà!

Normalement, ça devrait fonctionner. J'espère que c'est clair, sinon n'hésite pas à me contacter.

;-) HackTrack
0
vsiguier Messages postés 22 Date d'inscription vendredi 5 octobre 2001 Statut Membre Dernière intervention 19 février 2003
21 déc. 2001 à 12:18
Salut HackTrack !

J'ai essayé ce que tu m'as conseillé mais sans succès.
Il refuse de forwarder vers "/jsp/DownloadFeedback.jsp" malgré le fait que servletContext.getRequestDispatcher("/jsp/DownloadFeedback.jsp") n'est pas null !

Peut-être il y a-t'il un problème avec la manière dont je download le fichier au par avant ( dans la méthode boolean download(request, response) ) ... j'écris dans l'objet HttpServletResponse
les données du fichier zip à télécharger ( l_ByteArrayOutputStream ).

création du zip :
ByteArrayOutputStream l_ByteArrayOutputStream = new ByteArrayOutputStream();
ZipOutputStream l_ZipOutputStream = new ZipOutputStream(l_ByteArrayOutputStream);

écriture dans la reponse http :
ServletOutputStream l_ServletOutputStream = response.getOutputStream();
l_ServletOutputStream.write(l_ByteArrayOutputStream.toByteArray()); l_ServletOutputStream.flush();

Définition de l'entête de la réponse :
response.setContentType("application/zip");
response.setHeader("Content-Disposition","attachment; filename=View.zip;");

et enfin je renvoie true

Merci pour ton aide et comme d' hab si tu as une idée...
0
Salut tous le monde,
la solution est "sendRedirect".
@+
-1