我对所有这些事情都很陌生,但希望你们能帮我理解它是如何运作的。我有一个带字段的表格。我如何从客户端获取数据?正在寻找一些信息,但无法找到。
<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) - 一切正常请求.queryParams(XXXX) 如果我发送表单(method = post) - 请求.queryParams - 没有
也许有人知道我应该在POST请求中做些什么?
答案 0 :(得分: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 ...