Java servlet doPost方法不工作

Java servlet doPost方法不工作,java,html,forms,post,servlets,Java,Html,Forms,Post,Servlets,编辑: 我将post请求指向/vault/Login,但servlet在/vault/index和vault/Login上 当它指向索引时,它工作了 我正在尝试建立一个登录系统。 我有一个请求post方法的html文件,但请求时doPost方法从未触发。 单击submit按钮时,url会随其中的参数而更改,但不会发生任何变化。 每次执行doPost()时,第一条语句都会向控制台写入内容,但这两条语句都不会发生 public class Login extends HttpServlet {

编辑:

我将post请求指向/vault/Login,但servlet在/vault/index和vault/Login上 当它指向索引时,它工作了

我正在尝试建立一个登录系统。 我有一个请求post方法的html文件,但请求时doPost方法从未触发。 单击submit按钮时,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>
公共类登录扩展了HttpServlet{
受保护的void processRequest(HttpServletRequest请求、HttpServletResponse响应)
抛出ServletException、IOException{
}
@凌驾
受保护的void doGet(HttpServletRequest请求、HttpServletResponse响应)
抛出ServletException、IOException{
setContentType(“text/html;charset=UTF-8”);
System.out.println(“已点火”);
HttpSession session=request.getSession();
session.setAttribute(“loginFailed”,false);
RequestDispatcher rd=request.getRequestDispatcher(“Login.jsp”);
转发(请求、响应);
}
@凌驾
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)
抛出ServletException、IOException{
System.out.println(“这是另一个测试”);
HttpSession session=request.getSession();
字符串用户名=(字符串)session.getAttribute(“用户名”);
字符串密码=(字符串)session.getAttribute(“密码”);
System.out.println(用户名+“”+密码);
布尔成功=假;
如果(!“”.equals(用户名)和(!“”.equals(密码)){
试一试{
成功=身份验证。检查凭据(用户名、密码);
}捕获(nosuchalgorithmex异常){
Logger.getLogger(Login.class.getName()).log(Level.SEVERE,null,ex);
}
}
开关((字符串)session.getAttribute(“平台”)){
案例“浏览器”:
RequestDispatcher rd=request.getRequestDispatcher(“lobb.jsp”);
转发(请求、响应);
打破
案例“桌面”:
int id=Tracker.getIdByUsername(用户名);
List vaults=(List)VaultManagement.getVaultsByUserId(id);
int[]vaultIds=新int[vaults.size()];
if(vaults.isEmpty()){
vaultIds[0]=-1;
}否则{
int x=0;
用于(对象vault:vault){
拱顶v=(拱顶)拱顶;
vaultIds[x]=v.getId();
x++;
} 
}
DAL.Entities.Account=AccountManagement.getAccountByUsername(用户名);
LoginPackage pack=新的LoginPackage(用户名、密码、account.getEmail()、Vault ID);
字符串json=json.dataPackageToJson(pack);
PrintWriter=response.getWriter();
writer.print(json);
打破
}
}
@凌驾
公共字符串getServletInfo(){
返回“简短描述”;
}// 
}

职位


用户名:
密码:

登记
您忘记将
方法
属性指定为
post



为什么要使用
session.getAttribute
?尝试
request.getParameter
从请求中实际获取值。我是Java新手,我只是在某个地方看到了它,并对它进行了评估,我对它进行了更改。不起作用,我以前使用过它,但再次删除了它,因为当我指定方法时,它没有使用参数更改url,所以我认为它是错误的,并将其删除。(我只是再次测试了一下)@Jari A
post
request在请求的主体中发送参数,而不是在URL中。哦,我误解了我看到的东西。问题实际上是字符串中的.jsp
<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>