Bonjour,
je voudrais que l'utilisateur de mon application (applet) puisse télécharger un fichier. En fait j'ai une jtable dans mon applet et j'essaie d'envoyer cette JTable à mon servlet, pour que, lui, puisse créer le fichier sur le serveur et le renvoyer au client et que ça lui ouvre une fenêtre pour le télécharger.
Voilà le code de mon applet pour envoyer à 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
 
try {
   URL url = new URL(Main.serveur+"OuvrirFichier");
   URLConnection connexion = url.openConnection();
   connexion.setDoOutput(true);
   // Création du flux de données à envoyer vers la servlet
   XMLEncoder xmle = new XMLEncoder(new BufferedOutputStream(new ObjectOutputStream(connexion.getOutputStream())));				
   // Envoi de la requete vers la servlet
   xmle.writeObject(jtaffichage);
   Main.applet.getAppletContext().showDocument(url,"_blank");
} catch (MalformedURLException e1) {
   e1.printStackTrace();
} catch (IOException e1) {
   e1.printStackTrace();
}
Et voilà le code de ma 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
package servlet;
 
import java.beans.*;
import java.io.*;
import java.util.*;
 
import javax.servlet.*;
import javax.servlet.http.*;
import javax.swing.*;
import javax.swing.table.*;
 
 
import annexes.LanguageChooser;
 
public class OuvrirFichier extends HttpServlet{
 
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
 
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		doPost(req, resp);
	}
 
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		XMLDecoder xmld = new XMLDecoder(new BufferedInputStream(new ObjectInputStream(req.getInputStream())));
		Calendar c = Calendar.getInstance();
		JTable jt = (JTable) xmld.readObject();			
		String nomFichier = ".\\"+LanguageChooser.getAnInternationalizeString("stats")+"CSV-"+c.get(Calendar.YEAR)+"-"+c.get(Calendar.MONTH)+"-"+c.get(Calendar.DAY_OF_MONTH)+"_"+c.get(Calendar.HOUR)+"-"+c.get(Calendar.MINUTE)+"-"+c.get(Calendar.SECOND)+".csv";
		PrintWriter ecrivain;
		ecrivain = new PrintWriter(new BufferedWriter(new FileWriter(nomFichier)));
		String aecrire = jt.getColumnName(0);
		for(int i=1; i<jt.getColumnCount(); i++){
			aecrire += ";"+jt.getColumnName(i);
		}
		ecrivain.println(aecrire);
		for(int i=0; i<jt.getRowCount(); i++){
			aecrire = (String) jt.getValueAt(i, 0);
			System.err.println(aecrire);
			for(int j=1; j<jt.getColumnCount(); j++){
				aecrire += ";"+jt.getValueAt(i, j);
				System.err.println(aecrire);
			}
			ecrivain.println(aecrire);
			System.err.println(aecrire);
		}
		ecrivain.close();
		ResourceBundle types= ResourceBundle.getBundle("MimeType");
		File file = new File(nomFichier);
		resp.setContentType(types.getString("cvs"));
		resp.setHeader ("Content-Disposition", "attachment; filename=\""+nomFichier+"\"" );
		resp.setContentLength((int)file.length()); 
		// Write the output
		OutputStream out = resp.getOutputStream();
		FileInputStream instream = new FileInputStream(file); 
		int bufsize = resp.getBufferSize(); 
		byte[] buffer = new byte[bufsize]; 
		int length = 0; 
		while ((length = instream.read(buffer)) != -1){	
			out.write(buffer, 0, length); 	
		}
		instream.close(); 
		out.close();
	}
}
Mais lorsque je l'exécute, j'ai cette erreur dans la page html qui s'ouvre :
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
java.io.EOFException
	java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source)
	java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source)
	java.io.ObjectInputStream.readStreamHeader(Unknown Source)
	java.io.ObjectInputStream.<init>(Unknown Source)
	servlet.OuvrirFichier.doPost(OuvrirFichier.java:32)
	servlet.OuvrirFichier.doGet(OuvrirFichier.java:26)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
	sun.reflect.GeneratedMethodAccessor492.invoke(Unknown Source)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	java.lang.reflect.Method.invoke(Unknown Source)
	org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:243)
	java.security.AccessController.doPrivileged(Native Method)
	javax.security.auth.Subject.doAsPrivileged(Unknown Source)
	org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:275)
	org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:161)
Est-ce que vous voyez d'où cela peut venir??
Est-ce que j'utilise la bonne méthode?
Merci d'avance pour vos réponses.
Julie