为什么我在jsp中使用if语句会出现此错误?

时间:2016-09-27 04:17:03

标签: java html jsp servlets

这是我的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中获得的布尔值,它给了我这个错误。

enter image description here

我做错了什么?

1 个答案:

答案 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);