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 :

[Applet][Servlet] Problème de communication


Sujet :

Servlets/JSP Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2008
    Messages : 51
    Points : 33
    Points
    33
    Par défaut [Applet][Servlet] Problème de communication
    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

  2. #2
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Salut,

    Je sais pas si cela va t'aider mais d'après le stack, il y a un pb 'null' sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    req.getInputStream()
    d'ailleurs sur un request j'ai jamais eu cette méthode ...

    Mais franchement c pour aider un peu car c pas mon domaine les applets
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2008
    Messages : 51
    Points : 33
    Points
    33
    Par défaut
    Merci beaucoup pour ta réponse!!
    Comment tu as vu que c'était un problème de nullPointer???
    C'est ce qu'il me semblait mais je ne comprend pas pourquoi... J'ai essayé d'envoyer d'autres objet et j'ai toujours le même problème...

  4. #4
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    D'après le stack, tu as une File exception du à la création de ObjectOutputStream ... Le tout dans la méthode DoPost de la class OuvrirFichier ...

    Avant tout as tu essayé un truc tout simple comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    XMLEncoder e = new XMLEncoder( new BufferedOutputStream(
                                  new FileOutputStream("Test.xml")));
           e.writeObject(new JButton("Hello, world"));
           e.close();
    Euuuuhhh désolé plutôt avec un InputStream et puis e.write de ta JTable
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2008
    Messages : 51
    Points : 33
    Points
    33
    Par défaut
    Je n'ai pas tout compris Désolée...

  6. #6
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    CAD

    Dans la servlet un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
    			throws ServletException, IOException {
    		XMLDecoder xmld = new XMLDecoder(new BufferedInputStream(new ObjectInputStream("toto.xml")));
    		Calendar c = Calendar.getInstance();
    		JTable jt = (JTable) xmld.readObject();	
    	        // Le reste de ton traitement	....
     
    	}
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

Discussions similaires

  1. Problème communication applet / servlet (struts)
    Par probordelais dans le forum Applets
    Réponses: 4
    Dernier message: 12/10/2011, 14h52
  2. [Tomcat]communication applet-servlet
    Par Pill_S dans le forum Servlets/JSP
    Réponses: 16
    Dernier message: 06/04/2005, 18h05
  3. Réponses: 3
    Dernier message: 07/03/2005, 15h08
  4. [Communication APPLET-SERVLET] string -> fichier
    Par meufeu dans le forum Applets
    Réponses: 10
    Dernier message: 06/08/2004, 14h45
  5. [Applet - Servlet] Communication : quoi choisir ?
    Par gandalf_le_blanc dans le forum Applets
    Réponses: 14
    Dernier message: 28/04/2004, 15h43

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