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 d'une servlet de connection à la BD Mysql


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de psycho_xn
    Inscrit en
    Mars 2007
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 250
    Par défaut problème d'une servlet de connection à la BD Mysql
    salut,

    j'ai programmé une servlet pour vérifier une authentification à partir d'un formulaire. ma servlet est la suivante
    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
    public class ServletConnectionDB extends HttpServlet {
     
        private Connection connection = null;
     
    	public ServletConnectionDB() {
    	}
     
    public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
     
    		//on récupère les paramètres du formulaire
    		String login = request.getParameter("txtlogin");
    		String pass = request.getParameter("txtpass");
     
    		try {
                Class.forName("com.mysql.jdbc.Driver");
                connection = (Connection) DriverManager.getConnection("jdbc:mysql://127.0.0.1/devisedb");
                Statement statement = (Statement) connection.createStatement();
                ResultSet resultat = statement.executeQuery("SELECT * FROM user while login = "+ login +"and pass = "+pass);
     
                if(resultat.next()){
            		request.setAttribute("login",login);
            		request.setAttribute("pass",pass);
            		getServletContext().getRequestDispatcher("/acceuil.jsp").forward(request,response);	
                    }
     
            } catch (ClassNotFoundException e) {
                System.out.println(e);
            } catch (SQLException e){
            	System.out.println(e);
            }
    	}
     
     
    public void destroy() {
    		try{
    			connection.close();
    		}
    		catch(SQLException e){
    			;
    		}
    	}
     
     
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
     
    	}
     
     
    	public void init() throws ServletException {
    	}
     
     
     
    }
    le problème c ke, déja il n'ya pa de déclaration d'erreurs, donc la servlet s'exécute normalement, mais g croi k'elle ne trouve pa la BD et il ne déclare pas l'erreur k'il n'a rien trouvé de plus il ne me redirige pa vers ma jsp acceuil que j'ai mi dans le forward, dans la barre d'adresse j'ai tjs le lien de la servlet

    qq1 pourrait-il m'aider
    je développe des jsp, avec Ecllipse+Tomcat ma BD est Mysql

    merci beaucoup

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    En SQL, la condition commence par "where" (pas "while").
    De plus, tes paramètres sont (je pense) String donc les valeurs de comparaison sont exprimées entre '
    -> "select * from user where login='" + login + "' and pass='" + pass + "'"

    Je te conseil de passer par un preparedStatement (autant prendre de bonnes habitudes)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    PreparedStatement pstmt = connection.prepareStatement("select * from user where login=? and pass=?");
    pstmt.setString(1, login);
    pstmt.setString(2, pass);
    ResultSet rs = pstmt.executeQuery();
    ...
    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  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
    La remarque sur le while t'a déjà été faite dans un autre post ....

    Quant à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.out.println(e);
    en Web c'est pas top du tout ... Voir pour gérer un fichier de log (l'utilisation de log4j est vraiment simple).

    Sinon je t'ai aussi déjà conseillé de ne pas avoir ta connection en attribut de ta classe ... Si tu lis les réponses qu'on te fait, c'est mieux

  4. #4
    Membre éclairé Avatar de psycho_xn
    Inscrit en
    Mars 2007
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 250
    Par défaut
    j'ai fé ce m'a di OButterlin, mé c tjs le mêm problème, il ne retrouve pas la BD g croi et il ne génère mêm pa l'erreur de ne pa la trouver. de plus il ne redirige pa ma page. il me donne une page blanche et dans la barre d'adresse il ya le chemin de ma servelet: http://localhost:8080/declarationDev...etConnectionDB, alors qu'il doi me diriger vers la jsp acceuil que j'ai mi dans le forward

    qq1 à une idée ??

    ma servelet est :
    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
    public class ServletConnectionDB extends HttpServlet {
     
        private Connection connection = null;
     
        public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
     
    		//on récupère les paramètres du formulaire
    		String login = request.getParameter("txtlogin");
    		String pass = request.getParameter("txtpass");
     
    		try {
                Class.forName("com.mysql.jdbc.Driver");
                connection = (Connection) DriverManager.getConnection("jdbc:mysql://127.0.0.1/devisedb");
                PreparedStatement statement = connection.prepareStatement("SELECT * FROM user where login = '"+ login +"'and pass = '"+pass+"'");
                statement.setString(1,login);
                statement.setString(2,pass);
     
                ResultSet resultat = statement.executeQuery();
     
                if(resultat.next()){
            		request.setAttribute("login",login);
            		request.setAttribute("pass",pass);
            		getServletContext().getRequestDispatcher("http://localhost:8080/declarationDevise/acceuil.jsp").forward(request,response);	
                    }
     
            } catch (ClassNotFoundException e) {
                System.out.println(e);
            } catch (SQLException e){
            	System.out.println(e);
            }
    	}
     
    }
    et pour la remarque de chtig, je ne voi pas du tt ce ke vous voulez dire, je pense que vous me confondez avec qq1 d'autre.

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Si l'utilisateur n'existe pas avec ce mot de passe, tu ne revoies vers... rien...

    Donc, mets un autre getRequestDispatcher dans un else pour revenir sur la page d'appel

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre éclairé Avatar de psycho_xn
    Inscrit en
    Mars 2007
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 250
    Par défaut
    daccord. c juste ke pour l'instant j'ai des soucis avce mon pc et je n'arrive pas à lancer Tomcat à cause d'un virus, une fois que j'auré résolu mon pb g feré ce ke vs m'avez di et g vous tiendré au courant. ne m'oubliez pas parceke g seré tjs coincée

    merci bcp

  7. #7
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 68
    Par défaut
    Slt,
    j'éssayé de faire fonctionner ta servlet, ça ne marche tjr pas;
    met les 2 instructions suivantes dans ton code et tu me diras ce que ça donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    try {
                Class.forName("com.mysql.jdbc.Driver");
    
    PrintWriter out = request.getWriter();
    out.println("Le com.mysql.jdbc.Driver n'a pas été trouvé");
    
                connection = (Connection) DriverManager.getConnection("jdbc:mysql://127.0.0.1/devisedb");
                PreparedStatement statement = connection.prepareStatement("SELECT * FROM user where login = '"+ login +"'and pass = '"+pass+"'");
                statement.setString(1,login);
                statement.setString(2,pass);

  8. #8
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Visiblement vous ne connaissez pas le PreparedStatement.
    Ca ne sert à rien de créer une requête avec les concaténations des valeurs ou alors il faut rester sur un statement simple.
    Les lignes statement.setString(1, login) et statement.setString(2, password) sont sensées remplacer les ? (par leur position) de la requête. Si vous n'avez pas de ? (comme c'est le cas ici), ça ne va pas fonctionner.
    Donc (avec PreparedStatement), il faut demander ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    connection.prepareStatement("select * from user where login=? and pass=?");
    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [TOMCAT] Problème de timeout d'une servlet
    Par tuxor dans le forum Tomcat et TomEE
    Réponses: 5
    Dernier message: 18/09/2007, 12h04
  2. Problème de connection à une servlet
    Par ep31 dans le forum Java ME
    Réponses: 4
    Dernier message: 15/06/2007, 13h56
  3. Réponses: 1
    Dernier message: 14/05/2006, 20h02
  4. Problème de chargement d'une servlet
    Par jh0483 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 12/04/2006, 12h52
  5. [Tomcat] Problème pour accéder à une servlet
    Par david71 dans le forum Tomcat et TomEE
    Réponses: 9
    Dernier message: 08/04/2005, 13h56

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