2012-01-27 11 views
48

Ciò reindirizza una richiesta con un codice di stato HTTP 302temporanea:HttpServletResponse sendRedirect permanente

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

Ma è possibile reindirizzare con un codice di stato HTTP 301permanente?

risposta

78

È necessario impostare manualmente lo stato della risposta e l'intestazione Location.

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

Impostazione dello stato prima di sendRedirect() non funzionerà come sendRedirect() sarebbe overridde a SC_FOUND dopo.

+0

'Invia una risposta di reindirizzamento temporaneo il client che utilizza l'URL di posizione di reindirizzamento specificato. Ok, hai ragione. In realtà ho pensato che si sarebbe comportato in modo simile al modo in cui funziona con sendError dopo aver impostato uno stato. Da qui il 'try setting' nel mio post xD – chzbrgla

+2

Il 'sendError()' assume lo stato come argomento, 'sendRedirect()' no. Imposta implicitamente 302, indipendentemente dallo stato corrente. – BalusC

+2

Grazie, questo funziona. Per confermare la risposta, devi anche svuotare il buffer: 'response.flushBuffer();' – z12345

-1

Ho usato il seguente codice, ma non ha funzionato per me.

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

poi ho provato questo pezzo di codice ha funzionato per me

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

questo ha funzionato per me, ho avuto lo stesso problema

how to set status to 301 while redirecting

+0

Questa è la stessa risposta accettata. – z12345

Problemi correlati