【问题标题】:Respond to a http POST to tell client it was wrong input响应 http POST 告诉客户端输入错误
【发布时间】:2014-05-07 19:52:04
【问题描述】:

我刚刚完成了一个我已经研究了一段时间的 Java 应用程序。我唯一想做的就是实现在线注册。因为我习惯了 Java,所以我创建了自己的 HTTPServer(不使用任何 API,我喜欢重新发明轮子)来处理请求等等。它工作正常。

但是我对 HTML 很陌生,我在互联网上搜索了很多,但不知道如何做我想做的事:

我的服务器上有一个 SQLite 数据库,我希望网页在其中注册用户。 我使用下面的 HTML 代码实现了这一点。它使用来自用户的输入向我的服务器发送一条 http POST 消息,这很好用(请参阅下面的 Java 代码)。

我的问题是当用户尝试在数据库中注册一个已经注册的用户时,我不知道如何响应。我想做的是显示一条简单的消息并告诉用户尝试其他用户名。

如果有人能填补我所缺少的,将不胜感激。

HTML 索引.html

<!DOCTYPE html>
<html>
<body>

<form name=”Login” action =”success.html” method="post" target="_blank">
  Username: <input type="text" name="name"><br>
  Password: <input type=”password” name=”pass”><br>
  <input type="submit" value="Submit">
</form>

<p>Register here.</p>

</body>
</html>

Java 代码:

                //Code from http post received.
                String[] input = last.split("=|\\&");
                String loginName = input[1];
                SQLServer sqlServer = new SQLServer();
                if (sqlServer.containsLogin(loginName)) {
                    System.out.println("Registrated: " + loginName + "already in databse");
                    //Respond somehow to the client that user already in database.

                } else {
                    sqlServer.register(loginName, input[3]);
                    System.out.println("Registrated: " + loginName + "with password: " + input[3]);
                }

编辑:Palpatim 帮助后的新尝试:

                output.println("HTTP/1.0 401 Unauthorized");
                output.println("Server: Java HTTP Server 1.0");
                output.println("Date: " + new Date());
                output.println("Content-type: " + type);
                output.println("Content-length: " + fileLength);
                output.println(); //blank line between headers and content
                output.flush(); //flush character output stream buffer
                //After that code I send the file.

该标题的形成方式是否正确?因为它似乎不起作用。 该文件是Palpatim 发布的html 文件。也可以将 for 中的操作设置为空吗?所以在我从服务器发送 OK 或 401 之前它不会做任何事情?

【问题讨论】:

    标签: java html http registration


    【解决方案1】:

    在您使用的任何套接字对上(假设您也没有重写它),使用 HTTP response 的正文进行响应。

    回复的全部范围远远超出了简单 SO 问题的范围,但基本内容如下:

    • HTTP 状态代码(在您的情况下,可能在 400 范围内)和消息
    • 适当的 HTTP 标头
    • 适当的有效负载,可能包含结构化数据或纯文本,以及所需的消息。

    例如,如果您希望浏览器显示带有“抱歉,该用户已在数据库中”消息的页面,您可以通过网络发送此消息:

    HTTP 401 Unauthorized
    Content-Type: text/html
    
    <html>
    <head>
    <title>Already in database</title>
    <body>
    <p>Sorry, that user is already in the database</p>
    </body>
    </html>
    

    【讨论】:

    • 非常感谢,正是我所追求的,但是请您看看我在主帖中的编辑吗?
    • “似乎不起作用”是模棱两可的。您的客户端收到什么字节?使用curl 之类的工具向您的服务器发送请求,并检查结果。
    • 非常感谢,让它与您的代码一起使用:D
    【解决方案2】:

    由于您编写了自己的 httpserver,很难说如何将数据从数据模型中获取到视图中。在您的情况下,您可能需要通过 AJAX 请求提交注册并将您的响应作为 JSON 发送回页面,然后通过将结果消息添加到 DOM 或使用 alert() 使用 javascript 显示结果消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-24
      • 2013-01-18
      • 2016-04-10
      • 1970-01-01
      • 2017-09-16
      • 1970-01-01
      • 2020-12-31
      • 2019-01-29
      相关资源
      最近更新 更多