2014-07-10 4 views
0

J'ai récemment commencé la programmation Java. Je reçois java.lang.NullPointerException dans mon serlvet. Le code est posté ci-dessous. Quelqu'un peut-il m'aider s'il-vous-plaît?java.lang.NullPointerException- servlet de connexion

J'utilise mysql-nom d'utilisateur, mot de passe, etc sont corrects.Je peux voir les valeurs dans le tableau.

message dans la console -

java.lang.NullPointerException

à j2ee.Authenticate.processRequest (Authenticate.java:49)

à j2ee.Authenticate.doGet (Authenticate.java:93)

code -

package j2ee; 


import java.io.IOException; 
import java.io.PrintWriter; 
import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 


@WebServlet(name = "Authenticate", urlPatterns = {"/Authenticate"}) 
public class Authenticate extends HttpServlet { 


protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    response.setContentType("text/html;charset=UTF-8"); 
    PrintWriter out = response.getWriter(); 

    String user = request.getParameter("userId"); 
    String pwd = request.getParameter("passwd"); 
    String dbuser = null; 
    String dbpwd = null; 

    try 
{ 
    Class.forName("com.mysql.jdbc.Driver"); 
    Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/j2ee","root","password"); 

    String query = "select username, password from user_info where username=? && password=?"; 

    PreparedStatement p = con.prepareStatement(query); 
    p.setString(1,dbuser); 
    p.setString(2,dbpwd); 

    ResultSet rs=p.executeQuery(); 





    if(dbuser.equals(user) && dbpwd.equals(pwd)) 
    { 
      String s=request.getParameter(user); 
      out.println("Welcome" +s); 
      RequestDispatcher rd = request.getRequestDispatcher("Home"); 
      rd.include(request, response); 

    } 
    else 
    { 
      out.println("Please enter a valid Username and Password!"); 
      RequestDispatcher rd = request.getRequestDispatcher("Login"); 
      rd.include(request, response); 

    } 

} 
    catch (IOException e) 
    { 
    System.out.println(e); 
    } catch (ClassNotFoundException e) { 
     System.out.println(e); 
    } catch (SQLException e) { 
     System.out.println(e); 
    } catch (ServletException e) { 
     System.out.println(e); 
    } 


} 
+0

qu'est-ce que 'null'? –

+2

Avez-vous essayé de parcourir votre code pour déterminer quelle valeur est nulle? Je sais que l'éclipse a un très bon support pour le débogage. (Cela fait un moment que je l'ai utilisé, donc cela aurait pu changer.) – Freddy

+1

Voyez-vous où vous avez la ligne 'at j2ee.Authenticate.processRequest (Authenticate.java:49)'? Cela vous indique que le problème est dans la ligne 49 de 'Authenticate.java'. Le 'NullPointerException' vous indique que vous avez une variable qui est nulle. Cela pourrait vous aider à voir où le problème vient. – glenatron

Répondre

0

dbuser une nd dbpwd sont initialisés à null et n'ont jamais reçu de valeur. On dirait que vous essayez de valider une connexion par rapport à une table, mais vous ne lisez jamais les résultats de l'objet ResultSet. Je pense que vous voulez faire ceci:

String query = "select username, password from user_info where username=? && password=?"; 

    PreparedStatement p = con.prepareStatement(query); 
    p.setString(1,user); 
    p.setString(2,pwd); 

    ResultSet rs=p.executeQuery() 

    if (rs.next()) { 
     dbuser = rs.getString(1); 
     dbpwd = rs.getString(2); 
     } 
    // etc ... 

Peut-être lire sur le débogage dans un IDE et how to use result sets

+0

je l'ai eu beaucoup, mais que dois-je faire ensuite? comment puis-je valider le résultat? .... –

+1

Si vous avez une nouvelle question différente, puis postez une nouvelle question. orum pour le tutorat continu et ouvert. Peut-être passer un peu de temps à lire les [Tutoriels Java] (http://docs.oracle.com/javase/tutorial/) d'abord, puis lire sur JDBC, etc. Il y a des ressources infinies sur le web. Apprenez à les utiliser. – OldProgrammer

0

une mauvaise utilisation de la fonction prepareStatement, s'il vous plaît

String query = "select username, password from user_info where username=? && password=?"; 

PreparedStatement p = con.prepareStatement(query); 
p.setString(1,dbuser); //wrong, you are replacing ? with null 
p.setString(2,dbpwd); //wrong, you are replacing ? with null 

Vous devriez compter le nombre de ligne à la place.

String query = "select count(*) from user_info where username=? && password=?"; 
p.setString(1,user); 
p.setString(2,pwd); 
ResultSet rs=p.executeQuery() 

int result = rs.getInt(1); 
if(result >= 1){ 
    ..authen OK 
} 
else{ 
    ..authen failed 
} 
0

Vous ne définissez la valeur de dbuser et DBPwd, vous les avez initialisé avec null, mais vous l'avez utilisé dans PreparedStatement.

Questions connexes