java - 构建 Java 服务器,但我无法让页面停止加载(使用 PrintWriter 和 Buffered Reader)

标签 java query-string bufferedreader httpserver printstream

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

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

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

这是我的新方法的运作方式: 我想将我的路线和查询字符串(queryarray)传递给 bodyWithQueryString 方法。我希望该方法将文件(从路由)读取到字节输出流,在读取时对查询字符串的键/值对进行替换,最后返回字节。然后 getResponse() main 方法会将 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();
  }

最佳答案

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

关于java - 构建 Java 服务器,但我无法让页面停止加载(使用 PrintWriter 和 Buffered Reader),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17136445/

相关文章:

java - BufferedReader.readline() 挂起

java - 遍历目录,读入文件,并将它们打印到 html 文件中

java - 在 Testng 中分配负载

regex - 如何将查询字符串变量与 mod_rewrite 匹配?

java - itextpdf 特定页面上的不同边距

python - 我可以让 Django QueryDict 保留顺序吗?

php - Wordpress:如果(网址为 example.com/sitemap)执行此操作...

io - 使用 read_until() 时如何阻止 BufReader 在 Rust 中读取?

java - `+++` 是否只是一个后缀增量,后跟一个中缀(总是)?

java - 从 POJO 生成 JSON 样本