0

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

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

但是我遇到了两个问题:

  1. 当我使用重定向时,我没有收到被重定向到的 servlet 的响应。我有一些从未被 (b)
    servlet 调用的 javascript 警报。我正在使用相对路径并确认日志中的链接正确。
  2. 当我在新窗口中的步骤 1 中复制该链接时,我会看到结果。只是当它嵌入到发出请求的另一个页面中时不是。为什么会这样?是否可能是主机页面的限制并且无法呈现响应?
  3. 当我使用转发时,我会看到 servlet 响应,但随后会打开一个新窗口。从而使人远离原始页面。如果结果呈现在同一页面中,那就太好了。

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

4

1 回答 1

2

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

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

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

于 2012-05-22T17:10:19.190 回答