【问题标题】:Java servlet doPost method not workingJava servlet doPost 方法不起作用
【发布时间】:2018-11-19 08:18:15
【问题描述】:

编辑:

我将发布请求指向 /vault/Login,但 servlet 位于 /vault/index 和 vault/login 当它指向索引时它起作用了。

我正在尝试制作一个登录系统。 我有一个 html 文件,从该文件请求 post 方法,但 doPost 方法在请求时永远不会触发。 单击提交按钮时,url 会随其中的参数而变化,但没有任何反应。 每次执行 doPost() 时,第一条语句都会向控制台写入一些内容,但也不会发生这种情况。

public class Login extends HttpServlet {



protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
}

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {


    response.setContentType("text/html;charset=UTF-8");
    System.out.println("fired");
    HttpSession session = request.getSession();
    session.setAttribute("loginFailed", false);


    RequestDispatcher rd = request.getRequestDispatcher("Login.jsp");
    rd.forward(request, response);
}


@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    System.out.println("this is another test");            


    HttpSession session = request.getSession();

    String username = (String)session.getAttribute("username");
    String password = (String)session.getAttribute("password");
    System.out.println(username + " " + password);
    boolean succes = false;

    if (!"".equals(username) && !"".equals(password)){
        try {
            succes = Authentication.checkCredentials(username, password);
        } catch (NoSuchAlgorithmException ex) {
            Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    switch ((String)session.getAttribute("platform")){
        case "browser":
            RequestDispatcher rd = request.getRequestDispatcher("Lobby.jsp");
            rd.forward(request, response);
            break;
        case "desktop":

            int id = Tracker.getIdByUsername(username);
            List vaults = (List)VaultManagement.getVaultsByUserId(id);

            int[] vaultIds = new int[vaults.size()];

            if (vaults.isEmpty()){
                vaultIds[0] = -1;
            }else{
               int x = 0;
               for (Object vault : vaults){
                Vault v = (Vault)vault;
                vaultIds[x] = v.getId();

                x++;
               } 
            }
            DAL.Entities.Account account = AccountManagement.getAccountByUsername(username);
            LoginPackage pack = new LoginPackage(username, password, account.getEmail(), vaultIds);
            String json = JSON.dataPackageToJson(pack);
            PrintWriter writer = response.getWriter();
            writer.print(json);


            break;
    }

}

@Override
public String getServletInfo() {
    return "Short description";
}// </editor-fold>

}

发帖

<div class="jumbotron" width="10%">
            <form id="form"  action="/vault/Login.jsp">
                <h6>Username:</h6>
                <input type="text" class="form-control" id="username" name="username">
                <h6>Password:</h6>
                <input type="password" class="form-control" id="password" name="password"><br>
                <button type="button" onclick="location.href='vault/Register.jsp'" class="btn btn-secondary">Register</button>
                <input type="hidden" name="platform" value="browser"/> 
                <input type="submit" value="Login"/>
            </form>



        </div>

【问题讨论】:

  • 你为什么使用session.getAttribute?尝试request.getParameter 实际从 request 中获取值。
  • 我是 Java 新手,我只是在某处看到它,并认为它有效,我已经更改了它。

标签: java html forms post servlets


【解决方案1】:

您忘记将method 属性指定为post

<form id="form"  action="/vault/Login.jsp" method="post">
<!-- Here ---------------------------------^ -->

【讨论】:

  • 不起作用,我之前使用过但再次删除它,因为当我指定方法时它没有更改带有参数的url所以我认为它是错误的并删除它。 (我刚刚又测试了一次)
  • @Jari A post 请求在请求正文中发送参数,而不是在 URL 中。
  • 哦,我看错了
  • 问题实际上是字符串中的.jsp
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-18
  • 2017-01-05
  • 2012-02-27
  • 2011-02-01
  • 2013-05-26
  • 1970-01-01
相关资源
最近更新 更多