我在方法中有此部分,它应将页面和标题返回到Web浏览器。

tSend是字符串的包装类,getSub只是带回该类的另一个实例,即子组件。 tSend.get()是作为页面的字符串,tSend.getSub().get()是包含页面的响应头的字符串。

但是,在Firefox中,它给出了内容编码错误

码:

{
    tSend.getSub().println("Content-Length: " + tSend.get().length() + "\r");
    if (gzip) {
        tSend.getSub().println("Content-Encoding: gzip\r");
    }
    tSend.getSub().println("\r");
    if (mom.DEBUG)
        System.out.println("Sending to client");
    out.println(tSend.getSub().get());
    if (gzip) {
        byte[]bytes = tSend.get().getBytes();
        GZIPOutputStream outGZIP = new GZIPOutputStream(out);
        outGZIP.write(bytes, 0, bytes.length);
        outGZIP.finish();
    } else
        out.println(tSend.get());
}


我已经为tSend更改了类,也为它添加了类。该类只是为了缓冲响应,因此我可以使用内容长度来允许我在http服务器中保持活动状态。

码:

  public static class ToSend
  {
     private String string = "";
     private ToSend sub;
     public void setSub(ToSend nextLevel)
     {
        sub = nextLevel;
     }
     public ToSend getSub()
     {
        return sub;
     }
     public String get()
     {
        return string;
     }
     public void set(String s)
     {
        string = s;
     }
     public void print(String s)
     {
        string = string + s;
     }
     public void println(String s)
     {
        print(s + "\n");
     }
  }

最佳答案

我很困惑为什么您为与我相同的任务调用tSend.getSub().addln()tSend.getSub().println()

我认为如果您压缩内容,则不应该发送Content-Length:标头-在压缩完成之前,您将不知道大小。

在将gzip编码器附加到out.println()之前,您将其向下发送-这是故意的吗?您还忘记了那行的CR \r -这是故意的吗?

tSend.get()是否会产生使调试此代码变得困难的副作用? tSend.getSub()或调用它的任何方法是否有使调试复杂化的副作用?

10-02 00:31