如何将新标头传递给 sendRedirect

pnk*_*dgr 1 redirect servlets http-headers

我觉得这应该很容易。我有一个应用程序,我想要做的就是有一个表单页面 (index.jsp),它调用一个 servlet (CheckInfo.java),它设置一个新的标头 (myHeader) 并将用户重定向到另一个页面 (redirect.jsp) . 所有这些文件都在同一台服务器上。index.jsp 正在发送请求,CheckInfo 正在处理和重定向,但 myHeader 没有显示在 redirect.jsp 上。我读过几篇关于 response.sendRedirect 发送不传递标头的 302 的帖子,我应该使用 RequestDispatcher,但似乎没有任何效果。有没有办法将头从 servlet 发送到 jsp?这是servlet代码:

response.setHeader("myHeader", "hey there");
response.sendRedirect("redirect.jsp");
Run Code Online (Sandbox Code Playgroud)

我也试过这个:

response.setHeader("myHeader", "hey there");
RequestDispatcher view = request.getRequestDispatcher("redirect.jsp");
view.forward(request, response);
Run Code Online (Sandbox Code Playgroud)

我在redirect.jsp中有这个:

System.out.println(request.getHeader("myHeader"));
Run Code Online (Sandbox Code Playgroud)

这不会打印任何内容。

如果我的问题的答案是否定的……那么一旦我回到 jsp,我就会找到一种设置标题的方法。我的反向代理正在寻找特定的标头以确定是否执行操作。显然,我在redirect.jsp 上尝试了response.addHeader(),但此时页面已经加载,这让我觉得自己很傻。

pre*_*mar 5

response.setHeader("myHeader", "hey there");
response.sendRedirect("redirect.jsp");
Run Code Online (Sandbox Code Playgroud)

您将其添加为响应标头,它是 302 响应。浏览器看到 302 响应只会查找Location标头并向此位置发出新请求。响应中的自定义标头未受影响,而您希望这些自定义响应标头包含在未发送的请求中(到新的重定向位置)。

解决方案:-
1.您可以使用请求调度程序并转发请求而不是外部重定向。并且您需要在此处使用请求属性。

2. 您可以使用 ajax 请求调用提交表单,可能类似于 jquery 并手动处理响应(对于 302 响应),但不建议您使用这种方法,因为它不是一种更清晰和直观的方法。只是提一下,以便您知道还有其他方法可以实现这一目标。

  • 在调用请求调度程序转发之前使用 request.setAttribute('myHeader',String or object value) 。在您的 redirect.jsp 中,使用 request.getAttribute("myHeader") 。type 将值转换为 String 或您使用过的任何 Object 类型。 (2认同)