使用response.sendRedirect方法在java中发送Post请求

时间:2014-02-04 11:08:15

标签: java http-post

我想在java中发送一个帖子请求。 我已经通过使用Http Client看到了post请求的示例。 但我想使用sendRedirect方法。

对于前者,     https://processthis.com/process?name=xyz&phone=9898989898

我想使用post请求发送这些参数。因此,任何人都不会看到这些参数,同时我需要将我的网址重定向到该网址,

response.sendRedirect("https://processthis.com/process");

3 个答案:

答案 0 :(得分:7)

根据带有HTTP / 1.1的RFC2616,您可以发送 307 响应代码,这将使user-agent重复它对提供主机的POST请求。 在你的情况下,只需做

response.setStatus(HttpServletResponse.SC_TEMPORARY_REDIRECT);
response.setHeader("Location", url);

响应是您的HttpServletResponse对象。

希望这有帮助。

答案 1 :(得分:3)

当浏览器收到HTTP重定向代码时,它将始终按标准对给定的URL执行GET或HEAD。这就是必须通过查询字符串发送数据的原因。 如果要通过POST模拟重定向,可以向客户端发送包含所需信息的表单,并在页面加载事件中使用Javascript自动提交表单(通常用于SAML使用的不同服务器之间的通信)例如协议)。这是一个例子:

<form name="myRedirectForm" action="https://processthis.com/process" method="post">
    <input name="name" type="hidden" value="xyz" />
    <input name="phone" type="hidden" value="9898989898" />
    <noscript>
        <input type="submit" value="Click here to continue" />
    </noscript>
</form>
<script type="text/javascript">

    $(document).ready(function() {
        document.myRedirectForm.submit();
    });

</script>

旁注: 如果您的服务器中已有信息,为什么要发送重定向而不是执行给定的操作? 也许你想实现一个POST/REDIRECT/GET pattern

答案 2 :(得分:1)

我不认为这是可能的。为什么不使用RequestDispatcher。这对你有用。只需在请求中设置参数

request.setAttribute("message", "Hello test");
RequestDispatcher dispatcher = servletContext().getRequestDispatcher(url);

OR - HTTP规范规定所有重定向必须采用GET(或HEAD)的形式。如果安全性存在问题,您可以考虑加密查询字符串参数。

OR - 另一个选项,如果你有会话,在servlet中设置会话中的参数。然后在重定向到所需页面后从会话中获取它。