Javascript在Servlet连接上被截断

时间:2013-03-08 09:20:10

标签: java javascript http servlets get

我编写了一个应该像Web代理一样运行的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");

1 个答案:

答案 0 :(得分:0)

因为您正在做的只是阅读Html响应,但您实际上并没有调用HTML中引用的其他资源,如图像,js等。

当您监控浏览器如何通过Firebug for Firefox呈现html时,您可以观察到。

1)浏览器收到Html响应。

2)然后它解析引用的资源,并为每个资源进行单独的Get调用。

因此,为了使代理工作,您需要模仿此浏览器行为。

我的建议是使用已经可用的开源库HTML Unit