这是我的LoginServlet类的代码。
char firstDivider = 'X';
char secondDivider = 'Y';
int firstDividerIndex = line.indexOf(firstDivider);
int secondDividerIndex = line.indexOf(secondDivider);
String gatheredStr = line.substring(firstDividerIndex, secondDividerIndex);
我有一个名为loginFailed的布尔值。当用户没有帐户时,它将给出一个值true。我在jsp页面中创建了一个代码来检查这个变量。这是我的jsp代码。
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");
boolean loginFailed;
User user = null;
user = loginService.getUser(userName);
if(user != null && user.getPassword().equals(password)){
userType = loginService.getUserType(user).getUser_type();
if(userType.equals(USER_TYPE_CUSTOMER)){
HttpSession session = request.getSession();
session.setAttribute("username", user.getUsername());
response.sendRedirect("home_customer.jsp");
}else{
}
}else{
loginFailed = true;
request.setAttribute("username", userName);
request.setAttribute("loginFailed", loginFailed);
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/login.jsp");
dispatcher.forward(request, response);
}
}
我不确定这里有什么问题。我尝试通过输入“true”来改变if块中的条件,并且代码顺利进行。但是,如果我把我从servlet中获得的布尔值,它给了我这个错误。
我做错了什么?
答案 0 :(得分:2)
您只在失败时设置loginFailed
。如果成功,则表示您没有设置属性,因此您在JSP中获得空值,当您调用NullPointerException
时会产生if(loginFailed)
。
解决问题的一种方法是在不拆箱的情况下测试Boolean
对象:
if (Boolean.TRUE.equals(loginFailed))
另一个选择是确保设置属性是成功还是失败:
if (user != null && user.getPassword().equals(password)) {
//...
loginFailed = false;
} else {
//...
loginFailed = true;
}
request.setAttribute("loginFailed", loginFailed);