我想在java中发送一个帖子请求。 我已经通过使用Http Client看到了post请求的示例。 但我想使用sendRedirect方法。
对于前者, https://processthis.com/process?name=xyz&phone=9898989898
我想使用post请求发送这些参数。因此,任何人都不会看到这些参数,同时我需要将我的网址重定向到该网址,
response.sendRedirect("https://processthis.com/process");
答案 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中设置会话中的参数。然后在重定向到所需页面后从会话中获取它。