java.lang.NullPointerException
com.psger.dao.UserBeanDao.getUserBeanByUsername(UserBeanDao.java:33)
com.psger.servlet.LoginServlet.doPost(LoginServlet.java:68)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
com.psger.servlet.EncodingFilter.doFilter(EncodingFilter.java:25)package com.psger.dao;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;import com.psger.entity.UserBean;public class UserBeanDao {

private Connection conn = null;
private PreparedStatement pstmt = null;
private ResultSet rs = null;

UserBean user = null;

/**
 * 根据用户名取得用户对象
 * @param username 传入的用户名
 * @return 查询到的用户对象
 */
public UserBean getUserBeanByUsername(String userName) {
//UserBean user = null;
String sql = "SELECT * FROM tb_user WHERE userName=?";

conn = CommonDao.getConn();
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, userName);

rs = pstmt.executeQuery();
if(rs.next()){
user = new UserBean();
user.setUserId(rs.getInt("userId"));
user.setUserName(rs.getString("userName"));
user.setUserPassword(rs.getString("userPassword"));
user.setUserSex(rs.getString("userSex"));
user.setUserAge(rs.getInt("userAge"));
user.setTelephone(rs.getString("telephone"));
user.setAddress(rs.getString("address"));
user.setRoleId(rs.getInt("roleId"));
}

} catch (SQLException e) {
e.printStackTrace();
}finally{
CommonDao.shutDown();
}
return user;
}

/**
 * 获取所有用户列表,同时通过多表连接查询出权限
 * @return 
 */
public List<UserBean> getAllUsers(){
List<UserBean> user_list = new ArrayList<UserBean>();

String sql = "select u.*,r.roleName from TB_USER u,TB_ROLE r where u.roleId=r.roleId order by userId";
conn = CommonDao.getConn();
try {
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();

while (rs.next()){
user = new UserBean();

user.setUserId(rs.getInt("userId"));
user.setUserName(rs.getString("userName"));
user.setUserPassword(rs.getString("userPassword"));
user.setUserSex(rs.getString("userSex"));
user.setUserAge(rs.getInt("userAge"));
user.setTelephone(rs.getString("telephone"));
user.setAddress(rs.getString("address"));
user.setRoleId(rs.getInt("roleId"));
user.setRoleName(rs.getString("roleName"));

user_list.add(user);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
CommonDao.shutDown();
}

return user_list;
} /**
 * @param id
 * @return 根据用户id,返回对应用户信息
 */
public UserBean getUserInfoById(String id) {

String sql = "select u.*,r.roleName from TB_USER u,TB_ROLE r where u.roleId=r.roleId and u.userId=?";

conn = CommonDao.getConn();
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,id);

rs = pstmt.executeQuery();

if (rs.next()){
user = new UserBean();

user.setUserId(rs.getInt("userId"));
user.setUserName(rs.getString("userName"));
user.setUserPassword(rs.getString("userPassword"));
user.setUserSex(rs.getString("userSex"));
user.setUserAge(rs.getInt("userAge"));
user.setTelephone(rs.getString("telephone"));
user.setAddress(rs.getString("address"));
user.setRoleId(rs.getInt("roleId"));
user.setRoleName(rs.getString("roleName"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
CommonDao.shutDown();
}
return user;
}
/**
 * @pramat name
 * @return 根据用户名返回用户信息
 */ 
public UserBean getUserInfoByName(String name){

String sql = "select u.*,r.roleName from TB_USER u,TB_ROLE r where u.roleId=r.roleId and u.userName=?";

conn = CommonDao.getConn();
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,name);

rs = pstmt.executeQuery();

if (rs.next()){
user = new UserBean();

user.setUserId(rs.getInt("userId"));
user.setUserName(rs.getString("userName"));
user.setUserPassword(rs.getString("userPassword"));
user.setUserSex(rs.getString("userSex"));
user.setUserAge(rs.getInt("userAge"));
user.setTelephone(rs.getString("telephone"));
user.setAddress(rs.getString("address"));
user.setRoleId(rs.getInt("roleId"));
user.setRoleName(rs.getString("roleName"));

}
} catch (SQLException e) {
e.printStackTrace();
} finally {
CommonDao.shutDown();
}
return  user;
}

/**
 * 根据权限名获得权限ID
 */
public int getIdByRoleName(String name){

int id = 0;
String sql = "select roleId from tb_role where roleName=?";

// rs = CommonDao.query(sql,name);
try {
conn = CommonDao.getConn();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,name );
rs = pstmt.executeQuery();
if (rs.next()){
id = rs.getInt("roleId");
}

} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
CommonDao.shutDown();

}
return id;


} /**
 * 添加用户信息
 * 
 */
public boolean addUserInfo(UserBean ub){
String sql ="insert into TB_USER values(?,?,?,?,?,?,?,?)";

// System.out.println(ub.getUserId());
// System.out.println(ub.getUserName());
// System.out.println(ub.getUserPassword());
// System.out.println(ub.getUserSex());
// System.out.println(ub.getUserAge());
// System.out.println(ub.getTelephone());
// System.out.println(ub.getAddress());
// System.out.println(ub.getUserId());
String[] info ={ub.getUserId()+"",ub.getUserName(),ub.getUserPassword(),ub.getUserSex(),
ub.getUserAge()+"",ub.getTelephone(),ub.getAddress(),ub.getRoleId()+""};

return CommonDao.update(sql, info)>0;

}

/**
 * 修改用户信息
 * 
 */
public boolean updateUserInfo(UserBean ub){

String sql = "UPDATE TB_USER set userName=?,userSex= ?,userAge=?,telephone=?,address=? WHERE userId=?";

String[] info={ub.getUserName(),ub.getUserSex(),
ub.getUserAge()+"",ub.getTelephone(),ub.getAddress(),ub.getUserId()+""};
return CommonDao.update(sql, info)>0;
}
/**
 * 根据用户id,删除用户信息
 *  
 */
public boolean deleteUserById(String id){

String sql = "delete from TB_USER where userId=?";

return CommonDao.update(sql, new String[]{id})>0;
}

/**
 *@param userbean
 *@return 根据用户id,修改密码
 */
public boolean updateUserPasswd(UserBean userbean){

String sql = "update TB_USER set userPassword=? where userId=?";

return CommonDao.update(sql, new String[]{userbean.getUserPassword(),userbean.getUserId()+""})>0 ? true : false;
}
}
/**
 * 
 */
package com.psger.servlet;import java.io.IOException;
import java.util.List;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.psger.dao.RoleRightDao;
import com.psger.dao.UserBeanDao;
import com.psger.entity.RightBean;
import com.psger.entity.UserBean;/**
 * @author Psger
 * 
 */
@SuppressWarnings("serial")
public class LoginServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { this.doPost(request, response);
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { // 处理乱码
request.setCharacterEncoding("UTF-8"); String flag = request.getParameter("flag");

String path ="./index.jsp"; HttpSession session = request.getSession();// 用户存放用户信息
if (flag.equals("loginIn")) {
// 接收用户的输入
String username = request.getParameter("username");
String userpass = request.getParameter("password");
String input = request.getParameter("checkCode");
String rand = (String) session.getAttribute("rCode"); // 服务端验证
if (username == null || "".equals(username.trim())) {
response.sendRedirect(path);
}
if (userpass == null || "".equals(userpass.trim())) {
response.sendRedirect(path);
}
if (!input.equals(rand)) {
String msg = "<script type='text/javascript'>alert('验证码错误!');</script>";
request.setAttribute("err", msg);
request.getRequestDispatcher(path).forward(request,response);
return;
} // 调用ado层,根据用户名取得用户对象
UserBeanDao userDao = new UserBeanDao();
UserBean user = userDao.getUserBeanByUsername(username); // 判断
boolean result = false;
if (user != null) { // 用户名存在
if (user.getUserPassword().equals(userpass)) { // 密码也对
// 登录成功
result = true;
}
} if (result) {
// 登录成功
// HttpSession session = request.getSession();
session.setAttribute("USER", user);
session.setAttribute("user_name", user.getUserName());// 用于防止非法登录 // 读取该用户所拥有的菜单权限
RoleRightDao roleRightDao = new RoleRightDao();
List<RightBean> list = roleRightDao.getRightsByRoleId(user
.getRoleId()); // 把list传入到firmest里去
session.setAttribute("rightList", list); response.sendRedirect("/superet/jsp/main.jsp"); } else {
String msg = "<script type='text/javascript'>alert('用户名或密码错误,请重试!');</script>";
request.setAttribute("err", msg);
request.getRequestDispatcher(path).forward(request,response);
}
} else if (flag.equals("loginOut")) {
session.invalidate(); request.getRequestDispatcher("/jsp/logout.jsp").forward(request,
response);
return;

}}

解决方案 »

  1.   

    pstmt = conn.prepareStatement(sql);
    这句,说明你conn是空的。。conn = CommonDao.getConn();
    自己断点在这句看看,conn是不是为null
      

  2.   

    只能debug一步步的看什么原因。。看看哪里为空
      

  3.   

    可能错在LoginServlet 文件。
    UserBeanDao userDao = new UserBeanDao();
    UserBean user = userDao.getUserBeanByUsername(username);时抛出空指针。
    说明我在sevlet中访问不到userDao.可以在打点logger看能不能访问到UserBeanDao 
      

  4.   

    楼主真强悍,那么长的代码.  想这样的空指针异常,debug是最快的解决方法了
      

  5.   

    看看 CommonDao.getConn();这个的返回值是不是NULL
      

  6.   

    看楼主的代码,估计没几个人会认真看,发帖子还是用一个代码格式的那个吧,这样也方便大家帮你找错误。
    看一下哪行出错,如果是pstmt = conn.prepareStatement(sql);这里出错,那应该就是取不到连接,仔细检查一下数据库连接,看有没有问题