2012-05-22 29 views
0

我正在开发一个项目,其中运行的servlet打包在侦听请求并在独立页面上填充外部div的战争中。对servlet(a)发出初始请求,并且如果有要显示的数据,它将呈现该HTML。如果没有数据,它会将查询字符串传递给另一个servlet来处理请求,然后呈现带有选项的页面。Java servlet - 从子页面转发/重定向

我运行Tomcat 6与Windows Server 2008

但我遇到两个问题:

  1. 当我使用重定向,我没有得到任何来自servlet是 重定向到的响应。我有一些从未被(b)
    servlet调用的javascript警报。我使用相对路径并确认链接是 正确的日志。
  2. 当我在新窗口中将步骤1中的链接复制时,我看到了 的结果。而不是当它嵌入在另一个页面中,使 的请求。为什么会这样?这可能是主机页面的限制,无法呈现响应?
  3. 当我使用转发时,我看到servlet响应 ,但随后打开一个新窗口。因此把这个人从 的原始页面带走。如果结果在同一页面中呈现,这将非常棒。

确保我可以使用来自第一个servlet的响应对象从初始servlet调用重定向到另一个servlet的最佳实践是什么?

+0

你能澄清你的意思是“外国股利”吗?你的回应必须是提出请求的同一个客户。此外,servlet(运行在服务器上)不能调用Javascript(它在浏览器上运行)。 –

+0

基本上我们有一个网站www.isendrequests.com,它在JS中加载到我的servlet中,然后渲染一个div带有HTML的页面在请求中发回 – user82302124

回答

2

重定向返回一个HTTP 302响应,并在Location标题中包含客户端需要处理的新URL。基本上,你的JS代码必须检查响应状态代码,如果它是302,然后提取Location标题,然后重新发送一个新的请求。重复此操作,直到响应状态码为200.

它在浏览器地址栏中粘贴URL时起作用,因为浏览器已知道如何正确处理3nn响应。如果您在浏览器的webdeveloper工具集中打开网络流量跟踪器,则会看到新的URL发出了第二个GET请求。

另一种方式,如果servlet运行在同一个容器中,则只需使用RequestDispatcher#forward()而不是HttpServletResponse#sendRedirect()

+0

感谢BalusC - 我可以让服务器使用RequestDispatcher处理转发,但是它会呈现一个完全不同的页面任何有关如何让转发呈现相同页面的想法该电话? – user82302124

+0

显然,转发servlet仍在写入响应,但它不应该这样做。确定在转发之后您是否正确返回,或者是否已将其余代码放入“else”中? – BalusC