【问题标题】:Java servlet - Forwarding/Redirecting from subpageJava servlet - 从子页面转发/重定向
【发布时间】:2012-05-22 17:04:35
【问题描述】:

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

我在 Windows Server 2008 上运行 Tomcat 6。

但是我遇到了两个问题:

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

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

【问题讨论】:

  • 你能解释一下你所说的“外国div”是什么意思吗?您的响应必须针对发出请求的同一客户。此外,servlet(在服务器上运行)不能调用 Javascript(在浏览器上运行。
  • 基本上我们有一个网站,www.isendrequests.com,它在加载到我的 servlet 时在 JS 中调用,然后在页面上呈现一个 div,其中包含我在请求中发回的 HTML。

标签: java servlets httpresponse


【解决方案1】:

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

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

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

【讨论】:

  • 感谢 BalusC - 我可以让服务器使用 RequestDispatcher 处理转发,但它呈现一个完全不同的页面。关于如何让转发呈现进行调用的同一页面的任何想法?
  • 显然转发 servlet 仍在写入响应,而它不应该这样做。您确定您在转发之后正确返回,或者您已将剩余代码放在else 中吗?
猜你喜欢
  • 2013-05-27
  • 2012-04-11
  • 1970-01-01
  • 1970-01-01
  • 2011-12-20
  • 2019-07-16
  • 2015-07-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多