如何使用spark java从POST表单获取数据?

时间:2015-11-18 11:36:48

标签: spark-java

我对所有这些事情都很陌生,但希望你们能帮我理解它是如何运作的。我有一个带字段的表格。我如何从客户端获取数据?正在寻找一些信息,但无法找到。

<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请求中做些什么?

1 个答案:

答案 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 ...