1

我正在构建一个 Java 服务器,到目前为止一切都按预期工作。我可以使用我编写的两种方法提供静态 html 页面:正文和标题。现在,我正在尝试编写一个名为“bodywithQueryString”的新方法。

问题:几乎可以工作,但是页面加载后,加载不会停止。它只是加载和加载。我的静态页面没有发生这种情况。

旧方法和新 bodyWithQueryString() 方法之间的唯一区别在于,在新方法中,我使用的是缓冲读取器和打印写入器。这些对我来说是新功能,所以我猜我做得不对。

下面是我的新方法应该如何工作: 我想将我的路由和查询字符串(queryarray)传递给 bodyWithQueryString 方法。我希望该方法将文件(从路由)读取到字节输出流,在读取时对查询字符串的键/值对进行替换,最后返回字节。然后 getResponse() 主要方法会将 html 发送到浏览器。

这是我的代码:

public void getResponse() throws Exception {
  String[] routeParts = parseRoute(route); //break apart route and querystring
  File theFile = new File(routeParts[0]);
  if (theFile.canRead()) {
    out.write(header( twoHundredStatusCode, routeParts[0], contentType(routeParts[0]) ) );

    if (routeParts.length > 1) {  //there must be a querystring
      String[] queryStringArray = parseQueryString(routeParts[1]); //break apart querystring
      out.write(bodyWithQueryString(routeParts[0], queryStringArray)); //use new body method
    }
    else out.write(body(routeParts[0])); //use original body method

    out.flush();

private byte[] bodyWithQueryString(String route, String[] queryArray)
    throws Exception {

      BufferedReader reader = new BufferedReader(new FileReader(route));
      ByteArrayOutputStream fileOut = new ByteArrayOutputStream();
      PrintWriter writer = new PrintWriter(fileOut);
      String line;

      while ((line = reader.readLine()) != null) writer.println(line.replaceAll(queryArray[0]    ,queryArray[1]));    

      writer.flush();
      writer.close();
      reader.close();
      return fileOut.toByteArray();
  }
4

1 回答 1

1

在我看来,您没有返回 Content-Length 标头。这使得浏览器很难知道何时停止加载响应。

于 2013-06-16T19:02:29.170 回答