【发布时间】:2013-02-23 19:01:36
【问题描述】:
我编写了一个 Servlet,它应该像一个网络代理。但有些 Javascript GET 调用仅在我加载页面时返回部分原始内容,例如 localhost:8080/Proxy?requestURL=example.com。
将 java 脚本的内容打印到控制台时,它们是完整的。 但是浏览器的响应被截断了。
我是这样写的:
ServletOutputStream sos = resp.getOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(sos);
..
String str = content_of_get_request
..
writer.write(str);
writer.flush();
writer.close();
奇怪的是,当我像这样直接请求页面请求期间加载的 Javascript 时:
localhost:8080/Proxy?requestURL=anotherexaple.com/needed.js
全部内容返回给浏览器。
如果有人有想法就好了。 问候
更新:
问题在于我创建响应字符串的方式:
while ((line = rd.readLine()) != null)
{
response.append(line);
}
我从 Stream 中读取了一行并将其附加到 StringBuffer 上,但似乎 firefox 和 chrome 对此有问题。 似乎有些浏览器实现了 JavaScript 的最大行长,但是 RFC HTTP 1.1 标准中没有提到最大行长。
修复:
只需在行中添加“\n”即可解决问题。
response.append(line+"\n");
【问题讨论】:
-
也许你需要
flush()和close()作者?你这样做吗? Javadoc -
您是否验证了
str包含所有预期的内容,例如通过将其打印到 Java 控制台? -
Content-Type标头的值是否正确?
标签: java javascript http servlets get