java.lang.NullPointerException

UserDao.java

package com.sys.dao;


import java.sql.*;
import java.sql.ResultSet;



import com.sys.entity.User;
import com.sys.util.DBConnectionPool;

public class UserDao {
public User login(String username,String password) {
    Connection   conn = DBConnectionPool.getInstance().getConn();
    PreparedStatement ps;
    ResultSet  rs;
    User  user = new User();
    System.out.println("username"+username);
    System.out.println("password"+password);
    try {
        ps = conn.prepareStatement("select * from login where username=? and password=?");//报空指针的语句
        ps.setString(1,username);
        ps.setString(2,password);

        rs = ps.executeQuery();
        if(rs.next()){
            user = new User();
            user.setUsername(rs.getString("username"));
            user.setPassword(rs.getString("password"));
            user.setSchool(rs.getString("school"));
            user.setRole(rs.getString("role"));
            user.setName(rs.getString("name"));

        }
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    DBConnectionPool.getInstance().releaseConn(conn);
    return user;
}

}

LoginServlet.java

package com.sys.servlet;

import java.io.IOException;
import java.io.PrintWriter;

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

import com.sys.dao.UserDao;
import com.sys.entity.User;
public class LoginServlet extends HttpServlet {


    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setCharacterEncoding("utf-8");
        //获取用户名和密码
        String username = request.getParameter("username");

        String password = request.getParameter("password");
        if(password==null||username==null){
            System.out.println("Error");
        }
        //获取UserDao实例
        UserDao userDao = new UserDao();

        User user = userDao.login(username,password);//报空指针异常的语句

        HttpSession session=request.getSession(true);
        session.setAttribute("user",user);
        // 判断user是否为空
        if(user != null){
            // 转发到LoginSuccess.jsp页面
            //  getRequestDispatcher()是请求转发
            request.getRequestDispatcher("/WEB-INF/pages/main.jsp").forward(request, response);
        }else{
            // 登录失败
            request.getRequestDispatcher("/WEB-INF/pages/Login.jsp").forward(request, response);
        }
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);//报空指针的异常的语句
    }

}

 

在登陆后一段时间,就自动报出上面这个错误,刷新页面也回不到原来的界面了,怎么解决这个问题

如有帮助,还望采纳。

UserDao userDao = new UserDao();获取这个对象的时候为空了

Connection conn = DBConnectionPool.getInstance().getConn();

连接池满了,提供不了连接给你,conn为空

UserDao 类的39行删除

package com.sys.util;

import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
import java.util.Vector;


public class DBConnectionPool {
	private String url;
	private String name;
	private String pwd;
	private static DBConnectionPool  instance=null;
	public static DBConnectionPool  getInstance(){
		if(instance==null){
			instance = new DBConnectionPool();
		}
		return  instance;
	}
	static{
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();

		}
	}
	Vector<Connection>   pool = new Vector<Connection>();
	public DBConnectionPool() {
		
		Properties  pp = new Properties();
		try {
			String path = getClass().getResource("/").getPath();
			path = path.replace("%20", " ");
			path+="db.properties";
			pp.load(new FileInputStream(path));
			url =pp.getProperty("jdbc.url");
			name= pp.getProperty("jdbc.name");
			pwd =pp.getProperty("jdbc.password");

		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		
		//jdbc.url,jdbc.name,jdbc.pwd
		for(int i =0; i <10;i++){
			try {
				Connection  conn = DriverManager.getConnection(url,name,pwd);
				pool.add(conn);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
	}
	public Connection  getConn(){
		if(pool.size()>0){
			Connection  conn = pool.get(0);
			pool.remove(conn);
			return conn;
		}
		return null;
	}
	public void releaseConn(Connection  conn){
		if(conn!=null){
			pool.add(conn);
		}
	}
	
}

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632