servlet中的请求参数为null



所以我正试图为大学作业做一个项目,但我一辈子都无法让登录servlet工作。这段代码是我们的讲师给我们的,对他来说似乎总是很好用,所以当我在Netbeans 11.3中创建servlet时(我们也使用TomCat 9作为服务器,并复制了代码,它可以工作,但没有转到正确的页面。应该发生的是,如果密码和电子邮件为空,它会返回login.jsp页面,如果输入了管理员凭据,它会进入adminHome.jsp,如果它只是数据库中的普通用户(我们使用的是derby(,它应该进入shop.jsp页面。目前,代码不会超过第一个if语句——如果密码和电子邮件为空,请转到login.jsp页面。我在这里真的很失落,我一辈子都无法让它发挥作用,这是我项目的重要组成部分,我需要它来运行,否则我会损失很多分数。

LoginServlet.java
public class LoginServlet extends HttpServlet implements IConstants {
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String email = request.getParameter("email");
String password = request.getParameter("password");
if (StringUtils.isStringEmpty(email) || StringUtils.isStringEmpty(password)) {
RequestDispatcher rd = request.getRequestDispatcher("/login.jsp");
rd.forward(request, response);
System.out.println("This is the first breakpoint");
} else {
UserManager uMgr = new UserManager();
User user = uMgr.loginUser(email, password);
if (user == null) {
RequestDispatcher rd = request.getRequestDispatcher("/login.jsp");
rd.forward(request, response);
System.out.println("This is the second breakpoint");
} else {
request.getSession(true).setAttribute(IConstants.SESSION_KEY_USER, user);
if (user.getUserType().equals(IConstants.USER_TYPE_ADMIN)) {
RequestDispatcher rd = request.getRequestDispatcher("/adminHome.jsp");
rd.forward(request, response);
} else if (user.getUserType().equals(IConstants.USER_TYPE_GENERAL_USER)) {
RequestDispatcher rd = request.getRequestDispatcher("/shop.jsp");
rd.forward(request, response);
} else {
RequestDispatcher rd = request.getRequestDispatcher("/index.html");
rd.forward(request, response);
}
}
}
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>

}

login.jsp
<div class="container" id="LoginPageContainer">
<!-- Log In -->
<div class="container" id="login">
<div class="login" style="width: 500px; float:left; height:500px; background:#8AA994; margin:20px">
<form class="form-signin" action="LoginServlet" method="POST">
<input type="hidden" name="action" value="add">
<br/>
<br/>
<br/>
<h3 class="form-signin-heading">You need to be logged in to complete your purchase</h3>
<br/>
<h3 class="form-signin-heading"> Please Log In </h3>
<input type="text" class="input-block-level" id="email" placeholder="Email Address">
<br/>
<br/>
<input type="password" class="input-block-level" id="password" placeholder="Password">
<br/>
<label class="checkbox">
<input type="checkbox" value="remember-me"> Remember me
</label>
<br>
<a class="forgot-password" href="#">Forgot Password?</a>
<br/>
<br/>
<input type="submit" id="SignIn" value="Login">
</form>
</div>
</div>
IConstants.java
public interface IConstants {
//User Types
public static final String USER_TYPE_ADMIN = "ADMIN";
public static final String USER_TYPE_GENERAL_USER = "GENUSER";

//Session Keys
public static final String SESSION_KEY_USER = "SKUSER";
public static final String SESSION_KEY_ALL_USERS = "SKALLUSERS";

}

我不确定还包括什么,它是在Netbeans 11.3、TomCat 9.0.40上创建的,是一个Ant项目。很长一段时间以来,我一直相信这是TomCat的问题,但我设法让他给我们的另一个示例项目运行,我复制了代码并对其进行了调整以适应我的代码,但运气不好,它拒绝通过我在LoginServer中获得第一个断点的那一行。任何帮助都将不胜感激!

替换此代码:

<input type="text" class="input-block-level" id="email" placeholder="Email Address">
<br/>
<br/>
<input type="password" class="input-block-level" id="password" placeholder="Password">

使用此代码:

<input type="text" class="input-block-level" id="email" name="email" placeholder="Email Address" />
<br/>
<br/>
<input type="password" class="input-block-level" id="password" name="password" placeholder="Password" />

再试试。

如果有效,请阅读以下文章以获得解释:HTML中id和name属性之间的差异

最新更新