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 :

[Servlet] envoyer des données serializé par post


Sujet :

Servlets/JSP Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 40
    Points : 28
    Points
    28
    Par défaut [Servlet] envoyer des données serializé par post
    Bonjour,
    je souhaite envoyer un objet serializé à une servlet par la méthode doPost, ensuite que la servlet le dé-sérialize, fasse quelques traitements puis sérialize un autre objet pour le renvoyer à la classe qui a appelé la servlet.

    J'ai essayé de faire quelque chose mais cela ne marche pas, j'arrive à sérializé l'objet en XML mais je n'arrive pas à le récupérer.

    J'envois mon code :
    - Code de la méthode qui appelle 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
    public Vector<IntervenantTO> getIntervenantList(long[] listIdEntity) {
    		IntervenantListTO instance = new IntervenantListTO();;
    		try {
    			String pTypReq = "getListIntervenant"; //$NON-NLS-1$
    			URL servletUrl= new URL(urlServletBase+"pTypReq="+pTypReq); //$NON-NLS-1$
     
    			URLConnection conn = servletUrl.openConnection();
    			conn.setDoOutput(true);
    			OutputStream osw = conn.getOutputStream();
     
    	        final XMLEncoder xenc = new XMLEncoder(osw);
    	        // Write object.
    	        try
    	        {
    	            xenc.writeObject(listIdEntity);
    	            xenc.flush();
    	            xenc.close();
    	            osw.close();
    	        }
    	        catch(Exception theException)
    	        {
    	            System.out.println("EXCEPTION!" + theException); //$NON-NLS-1$
    	        }
    	        finally
    	        {
     
    	        }	
     
    	        InputStream br = conn.getInputStream();
     
    			instance = IntervenantListTO.load(br);
     
    		} catch (MalformedURLException e) {
     
    			e.printStackTrace();
    		} catch (IOException e) {
     
    			e.printStackTrace();
    		}				
     
            return instance.getIntervenantList();  
    	}
    - 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
    		long[] listIdEntity;
    		String pTypeReq = req.getParameter("pTypeReq");
    		System.out.println("EntityDAServlet.doPost()");
     
    		InputStream reqIn = req.getInputStream();
     
    	       // Create XML decoder.
            final XMLDecoder xdec = new XMLDecoder(reqIn);
     
     
            try {
    			final Object obj = xdec.readObject();
    			try
    			{
    			    listIdEntity = (long[])obj;
    			    reqIn.close();
    			    System.out.println(listIdEntity);
    				OutputStream respOs = resp.getOutputStream();
                        // suite du traitement.........

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 352
    Points : 445
    Points
    445
    Par défaut
    J'imagine que tu as une exception de type "Stream already acquired"

    Le problème est que tu mélange 2 modes incompatibles : POST et GET !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String pTypeReq = req.getParameter("pTypeReq");
    Traite ta requête en mode GET
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    InputStream reqIn = req.getInputStream();
    en mode POST : ce qui génère l'erreur car HTTP n'autorise pas cela !

    La seule méthode est de tout faire en POST, et donc de transmettre to paramètre pTypeReq aussi en POST.

    Jacques Desmazières

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 40
    Points : 28
    Points
    28
    Par défaut
    Merci jacques pour ces informations. J'ai donc passé ma variable pTypeReq en POST aussi mais j'ai toujours une erreur
    Lors de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    final Object obj = xdec.readObject();
    il me marque :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    org.xml.sax.SAXParseException: Premature end of file.
    Pourtant j'ai bien ecris dans le flux avant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	        final XMLEncoder xenc = new XMLEncoder(osw);
    	        // Write object.
    	        try
    	        {
    	            xenc.writeObject(listIdEntity);
    	            xenc.flush();
    	            xenc.close();
    	            osw.close();
    	        }
    Je ne comprends vraiment pas pourquoi j'ai cette erreur!

    :: edit :: finalement le code sur cette page fonctionne mais sur le mien j'avais rajouté un osw.close() avant d'écrire dans le flux. je suis un boulet
    Merci Jacques, tout marche maintenant

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Envoyer des données sur une base MySQL par ODBC
    Par Mut dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 06/02/2012, 15h32
  2. Envoyer des données d'une servlet vers une jsp
    Par MG-openssl dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 07/04/2011, 10h09
  3. Réponses: 1
    Dernier message: 26/04/2008, 18h09
  4. Réponses: 2
    Dernier message: 31/01/2008, 13h17
  5. [socket] envoyer des données vers un port com
    Par Slimer dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 20/07/2004, 17h35

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