web-dev-qa-db-fra.com

Spring MVC Controller: quelle est la différence entre "return forward", "return redirect" et "return jsp file"

Je ne comprends pas ce que je dois utiliser. J'ai deux pages - intro.jsp (1) et booksList.jsp (2). Pour chaque page, j'ai créé une classe de contrôleur. La première page a un bouton qui ouvre la deuxième page:

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

La première question est: Je ne suis pas sûr de l'exactitude de ce bouton. Cela fonctionne bien, mais j'ai un point d'interrogation après avoir appuyé sur ce bouton.

La deuxième question est: Lorsque j'appuie sur ce bouton, la méthode avec l'annotation suivante est appelée (Contrôleur pour la deuxième page):

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

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

Que dois-je retourner par cette méthode? En d'autres termes, comment passer de la première page à la seconde?

  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?

Je vois que le résultat est le même: toutes ces cordes m'ont donné la même page (la page 2 a été ouverte). Dans quels cas devrais-je utiliser "rediriger", "transférer", "page.jsp"?

J'ai aussi lu Publier/Rediriger/Obtenir un article . Dois-je utiliser "rediriger" après POST ??

20
Argamidon

La première question est: je ne suis pas sûr de l'exactitude de ce bouton. Cela fonctionne bien, mais j'ai un point d'interrogation après avoir appuyé sur ce bouton.

Ok, c'est insérer un point d'interrogation car vous utilisez la méthode GET http. Vous devez utiliser la méthode POST pour transmettre les données dans la charge utile de la demande.


return "redirect:/books";

Il revient au client (navigateur) qui interprète la réponse http et appelle automatiquement l'URL de redirection

return "jsp/books/booksList";

Il traite le JSP et envoie le HTML au client

return "forward:/books";

Il transfère la demande et appelle l'URL directement côté serveur.


Pour décider lequel utiliser, vous devez considérer certains aspects de chaque approche:

Transférer: est plus rapide, le navigateur client n'est pas impliqué, le navigateur affiche l'URL d'origine, la demande est transférée, faites l'URL transférée.

Rediriger: est plus lent, le navigateur client est impliqué, le navigateur affiche l'URL redirigée, il crée une nouvelle requête vers l'URL redirigée.

35
Marcelo Keiti