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 :

problème servlet enregistrement


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 8
    Par défaut problème servlet enregistrement
    Salut tout le monde,
    J’ai un petit problème avec ma servlet.
    Explication : j’ai une servlet pour créer un fichier XML le problème c’est que lorsque j’exécute ma servlet pour la deuxième fois elle me créer un nouveau fichier XML avec des nouveaux informations mais elle contient toujours les information de la première exécution.
    Je veux que ma servlet devienne vide automatiquement après l’exécution ou bien la détruire.
    Voila ma servlet :

    package admin;

    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.jdom.Document;
    import org.jdom.Element;
    import org.jdom.output.Format;
    import org.jdom.output.XMLOutputter;



    @SuppressWarnings("serial")
    public class ServletCre extends HttpServlet {

    // Creation de la racine XML
    static Element racine = new Element("questionnaire");
    //On crée un nouveau Document JDOM basé sur la racine que l'on vient de créer
    static org.jdom.Document document = new Document(racine);

    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException {
    String domaine = request.getParameter("domaine");
    String requete = "SELECT * FROM question WHERE type_domaine ='"+domaine+"'";
    ResultSet r = connect.ClassConnect.connexion_select(requete);
    try {
    // Bouclé sur les données extraites de la bases pour creer un fichier XML
    // a Chaque fois on cree une balises question avec des sous-balises qui contient les
    // coordonnées de chaque question .
    while(r.next()){

    // Recuperation des données de la base de données et les stocké dans des variables temp

    String code = r.getString("code_question");
    String type_q = r.getString("type_question");
    String type_d = r.getString("type_domaine");
    String valeur = r.getString("valeur");
    String choix1 = r.getString("choix1");
    String choix2 = r.getString("choix2");
    String choix3 = r.getString("choix3");
    String choix4 = r.getString("choix4");

    // Creation d'un element question en temps que racine

    Element question = new Element("question");
    racine.addContent(question);

    // Creation des autres elements etant des sous-balises de 'question'


    Element code_question = new Element("code-question");
    code_question.setText(code);
    question.addContent(code_question);

    Element type_question = new Element("type-question");
    type_question.setText(type_q);
    question.addContent(type_question);

    Element type_domaine = new Element("type-domaine");
    type_domaine.setText(type_d);
    question.addContent(type_domaine);

    Element valeur_question = new Element("designation");
    valeur_question.setText(valeur);
    question.addContent(valeur_question);

    Element choix_1 = new Element("choix1");
    choix_1.setText(choix1);
    question.addContent(choix_1);

    Element choix_2 = new Element("choix2");
    choix_2.setText(choix2);
    question.addContent(choix_2);

    Element choix_3 = new Element("choix3");
    choix_3.setText(choix3);
    question.addContent(choix_3);

    Element choix_4 = new Element("choix4");
    choix_4.setText(choix4);
    question.addContent(choix_4);

    }

    enregistrer("D:/"+domaine+".xml");
    getServletContext().getRequestDispatcher("/vues/ok.jsp").forward(request, response);
    }
    catch (SQLException sqle) {sqle.printStackTrace();}
    }

    static void enregistrer(String fichier)
    {
    try
    {FileOutputStream os = new FileOutputStream(fichier);
    XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat());
    sortie.output(document, os);
    os.flush();
    os.close();

    }
    catch (java.io.IOException e){}
    }

    // POST
    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException {
    // on passe la main au GET
    doGet(request, response);
    }

    public void destroy()
    {super.destroy();}
    }

    Aider moi s’il vous plais.

  2. #2
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 8
    Par défaut
    aider moi s'il vous plais. c'est urgent.

  3. #3
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    1) je n'ai pas compris ton problème exactement
    2)
    3) Attention, ce n'est pas un batch, c'est une servlet ! Donc environnement multi-utilisateurs multi-thread... Il se passe quoi si deux users sont sur le site en même temps là ???
    L'utilisation des static montre que clairement tu n'as pas bien entrevu le point
    3 ...

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Par défaut
    Citation Envoyé par stofeben
    Salut tout le monde,
    J’ai un petit problème avec ma servlet.
    Explication : j’ai une servlet pour créer un fichier XML le problème c’est que lorsque j’exécute ma servlet pour la deuxième fois elle me créer un nouveau fichier XML avec des nouveaux informations mais elle contient toujours les information de la première exécution.
    Je veux que ma servlet devienne vide automatiquement après l’exécution ou bien la détruire.
    Voila 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
    package admin;
     
    @SuppressWarnings("serial")
    public class ServletCre extends HttpServlet {
     
    //	Creation de la racine XML
    	static Element racine = new Element("questionnaire");
    //On crée un nouveau Document JDOM basé sur la racine que l'on vient de créer
    	static org.jdom.Document document = new Document(racine);
     
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    	 throws IOException, ServletException {
    		String domaine = request.getParameter("domaine");	
     
    			enregistrer("D:/"+domaine+".xml");
    			getServletContext().getRequestDispatcher("/vues/ok.jsp").forward(request, response);   
    			   }
    		catch (SQLException sqle) {sqle.printStackTrace();}
    	}
     
    	static void enregistrer(String fichier)
    	{
    	   try
    	   {FileOutputStream os = new FileOutputStream(fichier);
    		XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat());
    	    sortie.output(document, os);
    	    os.flush();
    	    os.close();
     
    	   }
    	   catch (java.io.IOException e){}
    	}
     
    	//	  POST
    	     public void doPost(HttpServletRequest request, HttpServletResponse response)
    	     throws IOException, ServletException {
    	   // on passe la main au GET
    	     doGet(request, response);
    	   }
     
    	     public void destroy()
    	     {super.destroy();}
    }
    Aider moi s’il vous plais.
    pourquoi mets-tu la méthode "enregistrer" et les variables d'instance racine et document en "static"....?
    Comme c'est static, la variable est partagée pour l'ensemble des instances de la Servlet... donc au 2ème appel, l'object "document" contient déjà les données du 1er appel... etc etc....
    si tu enlèves le mot clé "static", ça devrait fonctionner.
    De plus, tu n'as pas besoin de déclarer l'instance "racine".... c'est une variable locale de la méthode doGet..
    et pareil pour la variable "document" qui peut être locale.... et tu la passes en paramètre de la méthode "enregistrer"... ce qui peut te permettre d'externaliser le code d'enregistrement d'un document XML sur le disque dans une class utilitaires....

  5. #5
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Pas seulement ... La grande différence c'est que si tu gardes racine et document en attributs, ils sont partagés par l'ensemble des threads, et là aie aie aie ...

  6. #6
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 8
    Par défaut
    Merci beaucoup pour votre aide , c’étais une bonne remarque ‘static’ kan on a changé hop elle marche bien …. Merci encore 

  7. #7
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Citation Envoyé par chtig
    Pas seulement ... La grande différence c'est que si tu gardes racine et document en attributs, ils sont partagés par l'ensemble des threads, et là aie aie aie ...
    Attention tout de même à ce que je t'ai écrit là !!!
    Et si c'est bon, stp

Discussions similaires

  1. Problème d'enregistrement de DLL
    Par chleuh dans le forum Langage
    Réponses: 5
    Dernier message: 01/07/2005, 10h30
  2. problème d'enregistrement de textarea dans bdAccess
    Par pmboutteau dans le forum ASP
    Réponses: 23
    Dernier message: 04/04/2005, 15h10
  3. [Servlet]Pas d'affich de ma servlet: enregistrement proposé
    Par Fredooweb dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 12/02/2005, 17h12
  4. [Débutant] Problème servlet simple
    Par davycrocket dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 30/06/2004, 09h24
  5. Problèm d'enregistrement
    Par ludogim dans le forum Bases de données
    Réponses: 2
    Dernier message: 04/06/2004, 11h41

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