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

标签 java servlets httpresponse

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

我正在 Windows Server 2008 上运行 Tomcat 6。

但是我遇到了两个问题:

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

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

最佳答案

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

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

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

关于Java servlet - 从子页面转发/重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10706677/

相关文章:

python - 非常基本的 django 教程产生错误 : TypeError at/hello/, hello() takes no arguments (1 given)

java - 从公司名称查找公司部门/行业

java - 找不到适用于 jdbc :sqlserver://repcode;DatabaseName=reporting 的合适驱动程序

java - 如何使用@WebServlet 接受参数(以 RESTFul 方式)?

java - 什么是适合与 Vaadin 一起使用的紧凑、可嵌入的 Servlet 容器?

c# - ThreadAbortException(WebClient 使用 DownloadFile 从服务器获取文件)

Java Recovery4j 重试策略在 2 次重试后变为无限

java - java中的随机字符串条件

java - 如何使用 Spring Data 删除 MongoDB 中的记录

java - 如何动态设置 web.xml 中的 mimetype 值