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

问题描述:

这是我的LoginServlet类的代码。为什么我在jsp中使用if语句时出现此错误?

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); 
    } 
} 

我有布尔名为loginFailed。当用户没有帐户时,它将被赋予真值。我在我的jsp页面中做了一个代码来检查这个变量。这是我的jsp代码。

<body> 
<div class="container container-table" id="login"> 
    <div class="row vertical-center-row"> 
     <div class="col-md-4 col-md-offset-4"> 
      <div style="background-color: #297f56; padding: 15px; border-radius: 5%;"> 
       <h1 style="text-align: center; color: white;">JJ STORE</h1> 
       <% Boolean loginFailed = (Boolean) request.getAttribute("loginFailed"); 
        if(loginFailed){ 
         out.println("<div class='alert alert-warning'>Warning! Dont submit this.</div>"); 
        }%> 
       <form action="processLogin" method="post"> 
       <div class="form-group" > 
        <label for="email" style="color: white;">Username:</label> 
        <input type="text" class="form-control" name="username" value="${username}"> 
       </div> 
       <div class="form-group"> 
        <label for="pwd" style="color: white;">Password:</label> 
        <input type="password" class="form-control" name="password"> 
       </div> 
       <button type="submit" class="btn btn-default">Submit</button> 
       </form> 
      </div> 
     </div> 
    </div> 
</div> 

我不知道这里有什么问题。我试着改变if区块的条件,放入“true”并且代码顺利。但是,如果我把我从servlet获得的布尔值,它会给我这个错误。

enter image description here

我在做什么错?

当它失败时,您只设置loginFailed。成功时,您不设置该属性,因此您在JSP中获得空值,因此在拨打if(loginFailed)时导致NullPointerException。要解决这个问题

一种方法是测试Boolean对象不拆箱:

if (Boolean.TRUE.equals(loginFailed)) 

另一种选择是,以确保设置属性无论成功或失败:

if (user != null && user.getPassword().equals(password)) { 
    //... 
    loginFailed = false; 
} else { 
    //... 
    loginFailed = true; 
} 
request.setAttribute("loginFailed", loginFailed); 
+0

你的第一个建议解决了我的问题!这是我第一次遇到这个问题。顺便说一下,我是一名实习生jr软件工程师,其中一个给我的项目是以原始方式创建网站(使用servlet和jsp)。我不明白为什么我必须使用布尔代替布尔值(我从另一个答案中得到了这个)。无论如何,感谢哥们! – saluyotamazing