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 :

probleme de session


Sujet :

Servlets/JSP Java

  1. #1
    Membre éclairé
    Inscrit en
    Février 2007
    Messages
    406
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 406
    Par défaut probleme de session
    salut à tous,
    je voudrais ecrire une servlet qui affiche les parametres d'un formulaire saisi par l'utilisateur. elle affichera "c'est votre premiere visite pour les nouveaux sinon elle affiche le nombre de la visite pour les anciens.
    j'ai une petite idée pour ca, seulement je sais pas si je suis sur la bonne voie ou non.
    je pense à extraire les attributs de la session et à les comparer avec ceux du formulaire et puis traiter les deux cas. je trouve que cette solution est un peu longue , y a t-il une solution plus simple?
    merci de m'aider

  2. #2
    Membre confirmé
    Avatar de Casp
    Homme Profil pro
    Reponsable Technique
    Inscrit en
    Avril 2003
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Reponsable Technique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2003
    Messages : 133
    Par défaut
    salut

    tu doit surement avoir un bd avec une table représentant des user. pourquoi ne pas rajouter un champs dans ta table pour le nombre de visite que tu incrémentes qand il se co et que tu stock dans la session courante pour y avoir acces dans les différentes pages de ton apply.

    apres j'ai peut etre pas tout saisi dans ton soucis

  3. #3
    Membre éclairé
    Inscrit en
    Février 2007
    Messages
    406
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 406
    Par défaut
    oui en effet j'ai eu l'idée de creer une bd , mais ce n'est vraiment pas l'objectif... on m'a conseillé d'utiliser ServletContext, mais bon la je cherche comment je peux l'utiliser pour ce probleme.
    si quelqu'un a une idée ca serai sympa.
    merci d'avance

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Par défaut
    Tu vas bien devoir stocker quelque part l'information sur le nombre de visites d'un utilisateur.

    Le simple fait de stocker l'information dans des objets Java ne suffit pas car ceux-ci sont détruit lors d'un arrêt du serveur.

    Tu peux donc soit :

    - positionner un cookie sur le poste client,
    - enregistrer les informations sur l'utilisateur dans un fichier permanent (base de donnée, XML, ...).

    Maintenant pour ce qui concerne le ServletContext, si effectivement tu est prêt à ce que l'on dise à un utilisateur "c'est votre première visite sur ce site" alors qu'il est déjà venu sur le site mais qu'il y a eut un redémarrage du serveur entre temps, alors tu peux faire quelque chose comme celà :

    Version 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
    synchronized (getServletContext()) {
     
      if (getServletContext().getAttribute("users") = null)
          getServletContext().setAttribute("users", new HashMap<String, User>());
     
      Map<String,User> users = (Map<String,User>)
                    getServletContext().getAttribute("users");
     
      String userId = request.getParameter("login");
      User user = users.get(userId );
      if (user == null):
          users.put(userId , new User(userId));
     
      user.setNbVisites(user.getNbVisites()+1);
     
    }
    En JSP, l'objet ServletContext s'obtient via "application" (application.setAttribute("..."), ....).

  5. #5
    Membre éclairé
    Inscrit en
    Février 2007
    Messages
    406
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 406
    Par défaut
    salut à tous,
    merci Duc Lebowski pour ton aide. en fait je me fais pas de souci du faite que les données seront perdu quand j'éteindrai mon pc.
    je suis parvenu à ecrire un code , mais qui genere un warning lors de la compilation, et par consequent me pose un probleme àl'execution
    * classe personne:
    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
     
    public class Personne
    {private String prenom;
    private String nom;
    private String email;
    private int compteur;
    public Personne(String nom,String prenom,String email)
    	{this.nom=nom;
    	this.prenom=prenom;
    	this.email=email;
    	compteur=1;
    	}
    public String getPrenom()
    {return(prenom);}
     
    public String getNom()
    {return(nom);}
     
    public String getEmail()
    {return(email);}
     
    public int getCompteur()
    {return(compteur);}
     
    public void setPrenom(String prenom)
    {this.prenom=prenom;}
     
    public void setNom(String nom)
    {this.nom=nom;}
     
    public void setEmail(String email)
    {this.email=email;}
     
    public void setCompteur(int compteur)
    {this.compteur=compteur;}
     
    }
    *classe Visite
    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
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.util.*;
     
    public class Visite extends HttpServlet {
        public void doGet(HttpServletRequest req, HttpServletResponse res)
        throws IOException, ServletException
      {     res.setContentType("text/html");
            PrintWriter out = res.getWriter();
    		out.println("<html>");
                               out.println("<body><form method='post'>");
    		out.println("nom:   <input type='text' name='nom'><br>");
    		out.println("prenom:<input type='text' name='prenom'><br>");
    		out.println("email: <input type='text' name='email'><br>");
    		out.println("<input type='submit' value='envoyer'><br>");
    		out.println("</form></body></html>");}
     
     
        public void doPost(HttpServletRequest req, HttpServletResponse res)
        throws IOException, ServletException
        {   boolean trouve=false;
            int nbvisite=1;
        	res.setContentType("text/html");
            PrintWriter out = res.getWriter();
    		String n=req.getParameter("nom");
    		String p=req.getParameter("prenom");
            String e=req.getParameter("email");
     
            out.println("<html>");
            out.println("<body>");
     
    	    ServletContext app=getServletContext();
    		Vector vecteur=(Vector)app.getAttribute("vpersonne");
    		if (vecteur==null)
     
    		   {Personne perso=new Personne(n,p,e);
    	 	   Vector v= new Vector();
    	 	   v.add(perso);}
     
    		else
     
    		{for(int i=0;(i<vecteur.size()-1&&!trouve);i++)
    			{Personne k=(Personne)vecteur.get(i);
    			if ((n.equals(k.getNom()))&&(p.equals(k.getPrenom()))&&(e.equals(k.getEmail())))
    				{
    				trouve=true;
    				nbvisite=k.getCompteur();
    				k.setCompteur(nbvisite+1);
    				}
    		     }
     
    		if(!trouve) vecteur.add(new Personne(n,p,e));
    		}
     
     
    		out.println(n+" "+p+" "+e+" "+nbvisite+"visite(s)");
    		out.println("</body></html>");
     
        }
    }
    le message d'erreur obtenu lors de la compilation est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Note: C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\My-examples\WEB-INF\classes\Visite.java uses unchecked or unsafe operations.
    Note: Recompile with -Xlint:unchecked for details.
     
     
    Process completed.
    EDIT : en remarque, j'ai essayé de suivre les conseils se trouvant dans la FAQ concernant les warnings .
    http://http://java.developpez.com/fa...NING_unchecked
    j'ai ajouté ces Generics mais pas de resultat...

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 15
    Par défaut
    C'est jsute un warning, pas de probleme. Qu'appelle-tu "pas de résultat" ?

  7. #7
    Membre éclairé
    Inscrit en
    Février 2007
    Messages
    406
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 406
    Par défaut
    ba oui un warning au compilation c'est pas de probleme, mais à l'execution c'est bcp de probleme!!!
    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
    Etat HTTP 500 - 
     
    --------------------------------------------------------------------------------
     
    type Rapport d'exception
     
    message 
     
    description Le serveur a rencontré une erreur interne () qui l'a empêché de satisfaire la requête.
     
    exception 
     
    javax.servlet.ServletException: L'exécution de la servlet a lancé une exception
     
     
    cause mère 
     
    java.lang.NoClassDefFoundError: Personne
    	Visite.doPost(Visite.java:35)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    EDIT:ma classe Personne est bien compilé et mise dans autre fichier et dans le même repertoire que Visite... alors je me trompe dans qqchose????

    pas de resultat ca veut dire que les Generics ne changent rien

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Par défaut
    C'est un problème de classpath, ta classe Personne n'est pas référencée.

    Tu développes avec Eclipse ?

    As-tu bien le fichier Personne compilé [RacineWeb]\WEB-INF\classes\Personne.class ?

  9. #9
    Membre éclairé
    Inscrit en
    Février 2007
    Messages
    406
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 406
    Par défaut
    bonsoir,
    enfin j'ai trouvé la solution, il se trouve que j'ai commis une erreur dans mon code, moi aussi j'ai cru que c'été un probleme de classpath...
    pour ceux qui s'interesse à ce code:
    *class visite
    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
     
    import java.io.*;
    import java.util.Vector;
    import javax.servlet.*;
    import javax.servlet.http.*;
    public class Visite extends HttpServlet
    {
    	public void doGet(HttpServletRequest req,HttpServletResponse res)throws IOException,ServletException
    	{
    		res.setContentType("text/html");
    		PrintWriter out=res.getWriter();
    		out.println("<html><body>");
    		out.println("<form method='post'>");
    		out.println("Nom: <input type='text' name='nom'><br>");
    		out.println("Prénom: <input type='text' name='prenom'><br>");
    		out.println("E-mail: <input type='text' name='mail'><br>");
    		out.println("<input type='submit' value='OK'><br>");
    		out.println("</form>");
    		out.println("</body></html>");
    	}
    	public void doPost(HttpServletRequest req,HttpServletResponse res)throws IOException,ServletException
    	{
    		String nom=req.getParameter("nom");
    		String prenom=req.getParameter("prenom");
    		String mail=req.getParameter("mail");
    		int nb=1;
    		Personne P=new Personne(nom,prenom,mail);
    		ServletContext S=getServletContext();
    		Vector V=(Vector)S.getAttribute("persoVec");
    		if(V==null)
    		{
    			V=new Vector();
    			V.addElement(P);
    			S.setAttribute("persoVec",V);
    		}
    		else
    		{
    			boolean trouve=false;
    			for(int i=0;i<V.size()&&!trouve;i++)
    			{
    				Personne Pi=(Personne)V.elementAt(i);
    				if(P.equals(Pi))
    				{
    					trouve=true;
    					Pi.nbV++;
    					nb=Pi.nbV;
    				}
    			}
    			if(!trouve)
    			{
    				V.addElement(P);
    			}
    		}
    		res.setContentType("text/html");
    		PrintWriter out=res.getWriter();
    		out.println("<html><body>");
    		if(nb==1)
    			out.println("<h1>C'est votre premier visite");
    		else
    			out.println("<h1>Visite num:"+nb);
    		out.println("</body></html>");
    	}
    }
    *classe Personne:
    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
    public class Personne
    {
    	public String nom;
    	public String prenom;
    	public String mail;
    	public int nbV=1;
    	public Personne(String nom,String prenom,String mail)
    	{
    		this.nom=nom;
    		this.prenom=prenom;
    		this.mail=mail;
    	}
    	public boolean equals(Personne P)
    	{
    		return(nom.equals(P.nom)&&prenom.equals(P.prenom)&&mail.equals(P.mail));
    	}
    }
    et voila mon code fonctionne grâce à servletcontext et sans avoir besoin de base de donné.
    merci bcp a tout ceux qui m'ont repondu.

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

Discussions similaires

  1. Probleme de sessions avec un hébergeur
    Par totoranky dans le forum Langage
    Réponses: 3
    Dernier message: 20/10/2005, 02h36
  2. [Sécurité] Probleme de sessions
    Par perco dans le forum Langage
    Réponses: 4
    Dernier message: 05/10/2005, 11h04
  3. [VB.Net] Problème de Session
    Par theartist dans le forum ASP.NET
    Réponses: 7
    Dernier message: 09/09/2004, 16h06
  4. Problème de session sous Konqueror
    Par Escuzze dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 06/07/2004, 11h52
  5. [C#] Probleme de session
    Par alexischmit dans le forum ASP.NET
    Réponses: 2
    Dernier message: 26/04/2004, 16h33

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