2015-02-24 6 views
10

Non capisco cosa dovrei usare. Ho due pagine: intro.jsp (1) e booksList.jsp (2). Per ogni pagina ho creato una classe controller. La prima pagina ha il pulsante che apre la seconda pagina:Spring MVC Controller: qual è la differenza tra "return forward", "return redirect" e "return jsp file"

<form method="GET" action="/request-list"> 
     <input type="submit"/> 
</form> 

La prima domanda è: io non sono sicuro circa la correttezza questo pulsante. Funziona bene, ma ho un punto interrogativo dopo aver premuto questo pulsante.

La seconda domanda è: Quando si preme il pulsante, il metodo con successiva annotazione è chiamato (Controller per la seconda pagina):

@RequestMapping(value = "/books") 
@Controller 
public class BooksListController { 

    @RequestMapping 
    public String booksList() { 
     return "jsp/books/booksList"; 
    } 
} 

Cosa devo tornare con questo metodo? In altre parole, come posso passare dalla prima alla seconda?

  1. return "redirect:/books"; returns http://localhost:8080/books?
  2. return "jsp/books/booksList"; returns http://localhost:8080/request-list?
  3. return "forward:/books"; returns http://localhost:8080/request-list?

vedo che risultato è lo stesso: tutte queste stringhe mi ha dato la stessa pagina (pagina 2 è stato aperto). In quali casi dovrei usare "redirect", "forward", "page.jsp"?

Inoltre ho letto Post/Redirect/Get article. Devo utilizzare il "reindirizzamento" dopo la gestione del metodo POST ??

+0

Cosa intendi con "Ho il punto interrogativo dopo aver premuto questo pulsante"? Ad ogni modo, non era previsto chiamare/prenotare da quando hai inviato/lista di richieste –

+0

C'è un punto interrogativo - restituisce http: // localhost: 8080/lista richiesta **? ** Inoltre non ho chiamato/libro. Ho chiamato/libri. Questa pagina deve mostrare l'elenco dei libri. – Argamidon

risposta

19

La prima domanda è: non sono sicuro della correttezza di questo pulsante. It funziona bene, ma ho un punto interrogativo dopo aver premuto questo pulsante.

Ok, è inserire un punto interrogativo perché si utilizza il metodo GET http. È necessario utilizzare il metodo POST per trasferire i dati nel carico utile della richiesta.


return "redirect:/books"; 

Si ritorna al client (browser) che interpreta la risposta HTTP e automaticamente le chiamate l'URL di reindirizzamento

return "jsp/books/booksList"; 

E elaborare il JSP e inviare il codice HTML al client

return "forward:/books"; 

Trasferisce la richiesta e chiama l'URL direttamente sul lato server.


per decidere quale utilizzare è necessario considerare alcuni aspetti di ogni approccio:

avanti: è più veloce, il browser del client non è coinvolto, il browser visualizza l'URL originale, la richiesta viene trasferito fare l'URL inoltrato.

Reindirizza: è più lento, il browser client è coinvolto, il browser visualizza l'URL reindirizzato, crea una nuova richiesta all'URL reindirizzato.

+0

Grazie, ma lo so. Ho chiesto - In quali casi dovrei usarli? – Argamidon

+0

La risposta è stata modificata con le spiegazioni –

+0

Come ho potuto capire, devo usare "reindirizzare" dopo la modifica dei dati. Ho ragione? – Argamidon