Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的代码会引发此异常?_Java_Nullpointerexception - Fatal编程技术网

Java 为什么我的代码会引发此异常?

Java 为什么我的代码会引发此异常?,java,nullpointerexception,Java,Nullpointerexception,如果身份验证成功,我的servlet应该将我重定向到welcome.jsp页面,否则将重定向到fail.jsp页面 user = request.getParameter("name"); pass = request.getParameter("pass"); String q = "select * from users where user=" + user + " and password=" + pass + ""; Statement st = con.create

如果身份验证成功,我的servlet应该将我重定向到welcome.jsp页面,否则将重定向到fail.jsp页面

user = request.getParameter("name");
pass = request.getParameter("pass");
String q = "select * from users where user=" + user
        + " and  password=" + pass + "";
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(q);
String username = null;
String password = null;

while (rs.next()) {
    username = rs.getString(2);
    password = rs.getString(3);

}
if (username.equals(user) && password.equals(pass)) { // <-- Here is line 56
    response.sendRedirect("Welcome.jsp");

} else {
    response.sendRedirect("Fail.jsp");
}

如果查询返回0个元素,则username和password都为null,从而给出一个null指针

if(username==null || password==null){

          response.sendRedirect("Fail.jsp");
          return;
}
if (username!=null && username.equals(user)&& password.equals(pass))
        {
            response.sendRedirect("Welcome.jsp");
          return;

        }
        else {
          response.sendRedirect("Fail.jsp");
          return;
        }
你也应该使用报税表;在重定向之后(为了确保这一点),构建dao也会有所帮助,从长远来看,在servlet代码中包含sql代码将变得一团糟

if(rs.next())
    {
       response.sendRedirect("Welcome.jsp");

    }        
    else {
      response.sendRedirect("Fail.jsp");
    }
如果用户名和密码正确,则
rs.next()
将为true,因为查询将从数据库中检索一行。因此,您可以在
Welcome.jsp
中重定向到用户。否则,用户提供了错误的用户名或密码,因此您可以重定向到用户
Fail.jsp

但在您的方法中,如果用户提供了错误的用户名或密码,那么您肯定会得到一个
NullPointerException
,因为您没有正确地进行null检查


当您使用
连接
语句
结果集
时,一个重要的问题是,您应该适当注意打开和关闭它们。

是的,您是对的。。真聪明!!!但是我面临jdbc连接器的问题,我不知道原因。它向我展示了:Avertissement:web应用程序[/WebApplication5]注册了JDBC驱动程序[com.mysql.JDBC.driver],但在web应用程序停止时未能注销它。为了防止内存泄漏,JDBC驱动程序已被强制注销。信息:访问未访问的引用您没有关闭连接、语句或结果集。请更新您的代码并重试。是的,我修改了我的代码。现在我没有收到任何错误,但即使我键入了正确的用户名和密码,我也总是被重定向到fail.jsp。在查询中,您必须将此用户=“+user+”,而不是user=“+user+”。我首先使用了您的查询,它在登录时显示了错误。那么你现在可以登录了吗?@JohnnySparow。不,你的问题也一样。“当你明白了原因,你就会成为一个更好的编码员。”约翰尼斯帕罗。好。小步走是到达目的地的最佳方式。“很高兴看到你走上了正确的道路。”约翰尼斯帕罗。它是。我们都是在几乎相同的地方开始的。每次你花7个小时把头撞在墙上,几天(或几周)后得到解决方案,你就取得了进步。现在看来不是这样,但你将学到更多,不仅仅是如何避免犯这一特定错误。面对这一切,我很荣幸能坚持下去。这不是特定于JSP/Servlet的。这只是基本的Java。来自自己代码的
java.lang.*
包(如
java.lang.NullPointerException
)的每个编译器错误和异常都是基本java。很可能现在深入研究JSP/Servlet还为时过早,您最好退一步,先研究基本的Java示例(Oracle、OCP等)。
if(rs.next())
    {
       response.sendRedirect("Welcome.jsp");

    }        
    else {
      response.sendRedirect("Fail.jsp");
    }