如何从服务器到客户端(Java,HTML)编写答案

时间:2018-04-21 15:10:27

标签: java http server

我正在编写我的第一个非常简单的Java Server。

在方法sendAnswer中我有两种情况:1 - 如果URL有“/ s”我希望用户在浏览器消息页面中看到然后附加用户的IP地址。那么,我的第一个问题是,如何将thisIp.getHostAddress()附加到消息?

第二种情况 - 未找到 - 我希望用户在浏览器页面中找不到消息 - 它有效!但不是第一种情况 - 浏览器没有显示任何内容,我也收到错误 net :: ERR_CONTENT_LENGTH_MISMATCH 。你能告诉我,哪里出错了?

    public void sendAnswer() throws IOException {
        try {
          if(request.getUri().equals("/s")) {
            InetAddress thisIp = InetAddress.getLocalHost();
            System.out.println("IP:"+thisIp.getHostAddress());
            String msg  = "HTTP/1.0 200 OK\r\n" +
                    "Content-Type: text/html\r\n" +
                    "Content-Length: 23\r\n" +
                    "\r\n" +
                    "<h1>Page</h1>";
            output.write(msg.getBytes());
            output.flush();

          }
          else {
            //  not found
            String errorMessage = "HTTP/1.1 404 Page Not Found\r\n" +
              "Content-Type: text/html\r\n" +
              "Content-Length: 23\r\n" +
              "\r\n" +
              "<h1>Page Not Found</h1>";
            output.write(errorMessage.getBytes());
            output.flush();

          }
        }
        catch (Exception e) {
          // thrown if cannot instantiate a File object
          System.out.println(e.toString() );
        }
      }

1 个答案:

答案 0 :(得分:1)

正如@JacekCz(错误地)指出的那样,你错误地设置了内容长度:

net::ERR_CONTENT_LENGTH_MISMATCH

表示内容长度存在错误

String msg  = "HTTP/1.0 200 OK\r\n" +
    "Content-Type: text/html\r\n" +
    "Content-Length: 23\r\n" +
     "\r\n" +
     "<h1>Page</h1>";

是错误的,因为您的邮件<h1>Page</h1>的长度 13 ,而不是23(而不是10,如@JacekCz所评论的那样)。

通常,我们的问题的答案在于错误代码本身。在询问之前,请务必先阅读错误信息:)