【问题标题】:Request parameter is null in servlet [duplicate]servlet中的请求参数为空[重复]
【发布时间】:2021-01-11 19:50:05
【问题描述】:

所以我正在尝试为大学作业做一个项目,但我无法让登录 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 问题,但我设法让他给我们运行的另一个示例项目,我复制了该代码并对其进行了调整以适合我的代码,但没有运气,它拒绝超过我在 LoginServlet 中有第一个断点。 任何帮助都将不胜感激!

【问题讨论】:

    标签: html servlets http-request-parameters


    【解决方案1】:

    替换此代码:

    <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" />
    

    再试一次。

    如果有效,请阅读以下帖子以获得解释:Difference between id and name attributes in HTML

    【讨论】:

    • 不幸的是,它引发了 500 错误:HTTP 状态 500 – 内部服务器。知道下一步该做什么吗?
    • 这可能是数据库的问题。它清除了if 测试中缺少的电子邮件和密码,并尝试检索用户。服务器上的错误是什么?异常消息说明了什么?
    • 如果电子邮件和密码为空,我认为您没有使用任何条件。
    猜你喜欢
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    • 2016-09-06
    • 1970-01-01
    • 2011-08-07
    相关资源
    最近更新 更多