Java HttpServletResponse发送重定向永久

Java HttpServletResponse发送重定向永久,java,servlets,Java,Servlets,这将使用临时302 HTTP状态代码重定向请求: HttpServletResponse response; response.sendRedirect("http://somewhere"); 但是是否可以使用永久301 HTTP状态代码重定向它?您需要手动设置响应状态和位置头 response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY); response.setHeader("Location", "http://somewhe

这将使用临时302 HTTP状态代码重定向请求:

HttpServletResponse response;
response.sendRedirect("http://somewhere");

但是是否可以使用永久301 HTTP状态代码重定向它?

您需要手动设置响应状态和
位置

response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
response.setHeader("Location", "http://somewhere/");

sendRedirect()
之前设置状态将不起作用,因为
sendRedirect()
将在之后将其覆盖为
SC\u FOUND

我使用了以下代码,但不适用于我

String newURL = res.encodeRedirectURL("...");
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
response.sendRedirect(newURL);
然后我尝试了这段代码它对我有效

String newURL = res.encodeRedirectURL("...");
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
response.setHeader("Location", newURL);
这对我有效,我也有同样的问题


使用指定的重定向位置URL向客户端发送临时重定向响应。
确定-你说得对。我实际上认为,在设置状态后,它的行为与sendError的工作方式类似。因此,
sendError()
中的“try设置”将状态作为参数,
sendrirect()
不是。无论当前状态如何,它都会隐式设置302。谢谢,这很有效。要提交响应,还必须刷新缓冲区:
response.flushBuffer()@k12345:容器应该隐式执行此操作。实际上,您不需要向响应主体写入任何内容。@egemen:可能没有必要。您可能在设置响应状态后错误地继续代码流(例如,转发到某个JSP而不是从方法返回),或者您遇到了服务器中的错误。在这种情况下,向servletcontainer的供应商报告问题。