为什么我在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获得的布尔值,它会给我这个错误。
我在做什么错?
答
当它失败时,您只设置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);
你的第一个建议解决了我的问题!这是我第一次遇到这个问题。顺便说一下,我是一名实习生jr软件工程师,其中一个给我的项目是以原始方式创建网站(使用servlet和jsp)。我不明白为什么我必须使用布尔代替布尔值(我从另一个答案中得到了这个)。无论如何,感谢哥们! – saluyotamazing