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