关于eclispe中登录验证的空指针异常

UserDao.java 页面

package dao;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

import po.User;
public class UserDao {
public List getUser() {
try {
Class.forName("com.mysql.jdbc.Driver"); //加载MYSQL JDBC驱动程序

Connection connect = DriverManager.getConnection( "jdbc:mysql://localhost:3306/jsptest","root","123456");
//连接URL为 jdbc:mysql//服务器地址/数据库名 ,后面的2个参数分别是登陆用户名和密码
Statement stmt = connect.createStatement();
ResultSet rs = stmt.executeQuery("select * from user");
List list = new ArrayList();
while (rs.next()){
list.add(new User(rs.getInt("id"),rs.getString("username"),rs.getString("password"),rs.getInt("power")));
}
return list;
}
catch (Exception e) {
System.out.print("get data error!");
e.printStackTrace();
return null;
}
}
}

LoginServlet.java页面

package myservlet;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import dao.UserDao;
import po.User;

public class LoginServlet extends HttpServlet{

private static final long serialVersionUID = 1L;
public LoginServlet(){
    super();
}

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    this.doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    UserDao userdao=new UserDao();
    List<User> userlist=new ArrayList<User>();
    userlist=userdao.getUser();
    for(User l:userlist){
        if(l.getUsername().equals(username)&&l.getPassword().equals(password)){
            request.getRequestDispatcher("a.jsp").forward(request, response);
        }else{
            request.getRequestDispatcher("b.jsp").forward(request, response);
        }

    }


}

}

报错:
严重: Servlet.service() for servlet LoginServlet threw exception
java.lang.NullPointerException
at myservlet.LoginServlet.doPost(LoginServlet.java:34)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:643)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:610)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:503)
at java.lang.Thread.run(Unknown Source)

4个回答

错误说你是在doPost方法中的第32行报了空指针异常,没看到你的代码行数,定位不了,你找下32行

qq_39410441
她是月光好悲凉 回复Yarcl: 如果我在userdao.java中使用for ( User s : list){ System.out.println(s.getId()+s.getUsername()+s.getPassword()+s.getPower()); } 的话是可以得到-----1adminadmin10 2xu11234566 3xu21234561 4xu31234561 5xu04xu1231 6xu14xu1231------这样的数据库结果的
2 年多之前 回复
qq_39410441
她是月光好悲凉 回复Yarcl: 数据库是有数据的,如果我直接在UserDao.java 页面输出list集合 会把数据库表全部输出。我也是不知道userdao.getUser()能不能得到list集合才纠结的,如果得不到该怎么写才能得到存好的list集合。不知道前辈有没有经验。
2 年多之前 回复
u012225679
Yarcl 回复qq_39410441: 你那个方法是调用数据库的,你查看下数据库有数据没
2 年多之前 回复
u012225679
Yarcl 回复qq_39410441: 关键看userdao.getUser()方法,能不能返回list集合
2 年多之前 回复
u012225679
Yarcl 回复qq_39410441: 数据库有数据么,如果可以的话,你可以debug看下查询是否查出数据了。
2 年多之前 回复
u012225679
Yarcl 回复qq_39410441: 数据库有数据么,如果可以的话,你可以debug看下查询是否查出数据了。
2 年多之前 回复
u012225679
Yarcl 回复qq_39410441: 数据库有数据么,如果可以的话,你可以debug看下查询是否查出数据了。
2 年多之前 回复
qq_39410441
她是月光好悲凉 回复Yarcl: UserDao userdao=new UserDao(); List<User> userlist=new ArrayList<User>(); userlist=userdao.getUser(); 就这三句代码能不能返回list集合呢? 该怎么写呢?
2 年多之前 回复
qq_39410441
她是月光好悲凉 回复Yarcl: 麻烦你看下我的代码。 我在UserDao.java 页面创建getUser()方法返回了list集合(该集合查询了数据库数据),然后在LoginServlet.java页面调用getUser()方法传值给userlist,这样userlist得不到数据么?我是小白,很多东西不懂。这是我自己想的登录验证方法可能会有逻辑错误,你可以帮我看一下吗?为什么userlist没有数据呢? 谢谢
2 年多之前 回复
u012225679
Yarcl 回复qq_39410441: 在进行增加强for循环前,要对循环对象进行判断不为空才可以使用增强for循环,普通for循环不会出现这个问题,你可以使用普通for循环试下。你的userList应该是没有查到数据!!
2 年多之前 回复
qq_39410441
她是月光好悲凉 就是for循环这行-------- for(User l:userlist){
2 年多之前 回复

你getUser的方法是 是数据里面所有的字段 都有值么 有没有空值的情况

sinat_38913556
sinat_38913556 一般来说 用户登录 要根据用户名和密码 去数据库查 如果查出来 就验证成功 查不出来 就验证失败
2 年多之前 回复
userdao.getUser();方法改一下

User user=userdao.getUser(username,password);

方法里面sql语句也改一下
select * from user where   username = '"+username+"' and password = '"+password+"'";
用户名密码是唯一的 所以用if
User user = null;
if (rs.next()){
    user = new User();
}
return user;



controller 判断
User user=userdao.getUser(username,password);
if(user!=null){
    //登录成功
}else{
    //登录失败
}

sinat_38913556
sinat_38913556 只是一个思路 代码根据需求自己完善
2 年多之前 回复

你这个估计是因为泛型擦除错误引起的,没估计错的话。你得在UserDao.java里面将创建list集合时这行代码由List list = new ArrayList();改成List userlist=new ArrayList();试试看有没有用

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问