2012-01-27 12 views
48

ten przekierowuje żądania z tymczasowego 302 HTTP kodem stanu:HttpServletResponse sendRedirect stałe

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

Ale czy to możliwe, aby przekierować ją na stały kod stanu HTTP 301?

Odpowiedz

78

Musisz ustawić status odpowiedzi i nagłówek Location ręcznie.

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

Ustawianie stanu przed sendRedirect() nie będzie działać jako sendRedirect() byłoby overridde go SC_FOUND później.

+0

'Wysyła tymczasową odpowiedź przekierować do klient używa podanego adresu URL przekierowania lokalizacji. Ok - masz rację. Właściwie myślałem, że będzie zachowywać się podobnie do działania z sendError po ustawieniu statusu. Stąd "ustawienia prób" w moim poście xD – chzbrgla

+2

Funkcja 'sendError()' przyjmuje status jako argument, 'sendRedirect()' nie. Domyślnie ustawia 302, niezależnie od bieżącego statusu. – BalusC

+2

Dziękuję, to działa. Aby zatwierdzić odpowiedź, należy również opróżnić bufor: 'response.flushBuffer();' – z12345

-1

Użyłem następującego kodu, ale nie zadziałało dla mnie.

String newURL = res.encodeRedirectURL("..."); 
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY); 
response.sendRedirect(newURL); 

następnie próbowałem ten kawałek kodu to pracował dla mnie

String newURL = res.encodeRedirectURL("..."); 
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY); 
response.setHeader("Location", newURL); 

ten pracował dla mnie, miałem ten sam problem

how to set status to 301 while redirecting

+0

To jest ta sama odpowiedź, co zaakceptowana. – z12345