我在方法中有此部分,它应将页面和标题返回到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()
或调用它的任何方法是否有使调试复杂化的副作用?