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