Java servlet - 从子页面转发/重定向

时间:2012-05-22 17:04:35

标签: java servlets httpresponse

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

我正在使用Windows Server 2008运行Tomcat 6.

但我遇到两个问题:

  1. 当我使用重定向时,我得不到servlet的响应 重定向到。我有一些javascript警报从未被(b)发出 servlet的。我使用相对路径并确认链接是 在日志中更正。
  2. 当我在新窗口中复制第1步中的链接时,我明白了 结果。只是不是当它嵌入另一个页面时 请求。那为什么会这样?是否可能是主页的限制而无法呈现响应?
  3. 当我使用forward时,我看到servlet响应, 但随后会打开一个新窗口。从而使人远离 原始页面。如果结果在同一页面中呈现,这将是很好的。
  4. 确保我可以使用第一个servlet中的响应对象从初始servlet调用“重定向”到另一个servlet的最佳实践是什么?

1 个答案:

答案 0 :(得分:2)

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

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

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