回复一个http POST告诉客户端输入错误

时间:2014-05-07 19:52:05

标签: java html http registration

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

但是我对HTML很新,我在互联网上搜索了很多,但无法弄清楚如何做我想做的事情:

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

我的问题是,当用户尝试在数据库中注册已注册的用户时,我无法弄清楚如何响应。我想要做的是显示一条简单的消息并告诉用户尝试其他用户名。

如果有人能填写我所遗漏的内容,我将非常感激。

HTML index.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之前它不会做任何事情吗?

2 个答案:

答案 0 :(得分:1)

在您使用的任何套接字对上(假设您没有重写它),请回复HTTP response的正文。

响应的全部范围远远超出简单SO问题的范围,但基本要点是:

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

例如,如果您希望浏览器显示带有&#34;抱歉的页面,则该用户已经在数据库中#34;消息,您可以通过电汇发送:

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>

答案 1 :(得分:0)

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