2012-01-27 3 views
48

Это будет перенаправлять запрос с временным кодом состояния 302 HTTP в :HttpServletResponse sendRedirect постоянный

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

Но можно перенаправить его постоянный код статуса 301 HTTP?

ответ

78

Вам необходимо установить статус ответа и заголовок Location вручную.

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

Установка статуса перед sendRedirect() не будет работать, как sendRedirect() бы overridde его SC_FOUND впоследствии.

+0

'Посылает временный ответ перенаправления на клиент с использованием указанного URL-адреса перенаправления. «Хорошо, вы правы. Я действительно думал, что он будет вести себя аналогично тому, как он работает с sendError после установки статуса. Следовательно, параметр «try setting» в моем сообщении xD – chzbrgla

+2

'sendError()' принимает статус как аргумент, 'sendRedirect()' not. Он неявно устанавливает 302, независимо от текущего состояния. – BalusC

+2

Спасибо, это работает. Чтобы зафиксировать ответ, вам также нужно сбросить буфер: 'response.flushBuffer();' – z12345

-1

Я использовал следующий код, но не работал для меня.

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); 

это работало для меня, у меня была такая же проблема

how to set status to 301 while redirecting

+0

Это тот же ответ, что и принятый. – z12345

Смежные вопросы