2015-11-18 50 views
2

我對所有這些東西都很新穎,但希望你們能幫助我理解它是如何工作的。我有一個領域的表格。我如何從客戶端獲取數據?正在尋找一些信息,但找不到。如何使用spark java從POST表單獲取數據?

<form action="/login" method="POST"> 
    <fieldset> 
     <legend>MemberId</legend> 
     <div class="form-group"> 
      <div class="row colbox"> 
       <div class="col-lg-4 col-sm-4"> 
        <label for="txt_memberid" class="control-label">MemberId</label> 
       </div> 
       <div class="col-lg-8 col-sm-8"> 
        <input class="form-control" id="txt_memberid" name="txt_memberid" placeholder="MemberId" type="text" value="" /> 
        <span class="text-danger"></span> 
       </div> 
      </div> 
     </div> 

     <legend>Login</legend> 
     <div class="form-group"> 
      <div class="row colbox"> 
       <div class="col-lg-4 col-sm-4"> 
        <label for="txt_username" class="control-label">Username</label> 
       </div> 
       <div class="col-lg-8 col-sm-8"> 
        <input class="form-control" id="txt_username" name="txt_username" placeholder="Username" type="text" value="" /> 
        <span class="text-danger"></span> 
       </div> 
      </div> 
     </div> 

     <div class="form-group"> 
      <div class="row colbox"> 
       <div class="col-lg-4 col-sm-4"> 
        <label for="txt_password" class="control-label">Password</label> 
       </div> 
       <div class="col-lg-8 col-sm-8"> 
        <input class="form-control" id="txt_password" name="txt_password" placeholder="Password" type="password" value="" /> 
        <span class="text-danger"></span> 
       </div> 
      </div> 
     </div> 

     <div class="form-group"> 
      <div class="col-lg-12 col-sm-12 text-center"> 
       <input id="btn_login" name="btn_login" type="submit" class="btn btn-default" value="Login" /> 
       <input id="btn_cancel" name="btn_cancel" type="reset" class="btn btn-default" value="Cancel" /> 
      </div> 
     </div> 
    </fieldset> 

get("/login", (request, response) -> { 
     ConsoleLog.consoleLog(log, request); 
     HashMap model = new HashMap(); 
     model.put("content", new VelocityTemplateEngine().render(new ModelAndView(new HashMap(),"templates/form_login.vtl"))); 
     return new ModelAndView(model, "templates/base.vtl"); 
    }, new VelocityTemplateEngine()); 

    post("/login", (request, response) -> { 
     ConsoleLog.consoleLog(log, request); 
     Integer memberId = -1; 
     String username = ""; 
     String password = ""; 
     try { 
      username = request.queryParams("txt_username"); 
      password = request.queryParams("txt_password"); 
      memberId = new Integer(request.queryParams("txt_memberid")); 
     } catch (Exception e) {} 
     log.info("MemberId="+memberId+" UserName="+username+" Password="+password); 
     if (new MemberDAO().isAuth(new Auth(username,password,memberId))) { 
      request.session(true); 
      request.session().attribute("txt_memberid", memberId); 
      request.session().attribute("txt_username", username); 
     } 
     return "process"; 
    }); 

如果我發送的形式(包含method = get) - 一切工作正常request.queryParams(XXXX) 如果我發送的形式(方法=後) - 在request.queryParams - 什麼

也許有人知道我應該在POST請求中做什麼?

回答

5

可能有一些事情是錯誤的。 Java代碼,HTML標記或其他任何內容都可能有錯誤。在不知道任何其他信息的情況下,最好的辦法是嘗試使用試驗和錯誤方法來調試發生了什麼問題。

然而,試圖在此之前,你可以做的第一件事就是打印出到底是什麼形式的post向您發送:

post("/login", (request, response) -> { 
    System.out.println(request.body()); 
    ... 

如果它打印出什麼,則客戶端沒有任何東西給你發送,所以問題在於此。

如果它打印出一個字符串,例如txt_username=john&txt_password=pass,然後在客戶端向您發送數據,使你真正需要做的是提取使用request object's methods provided by Spark從它的數據。因此,要進行調試,請使用所述的試錯法:

post("/login", (request, response) -> { 
    System.out.println(request.contentType()); // What type of data am I sending? 
    System.out.println(request.params()); // What are the params sent? 
    System.out.println(request.raw()); // What's the raw data sent? 
    // etc ... 
相關問題