web-dev-qa-db-ja.com

Spring MVC Controller:「return forward」、「return redirect」、「return jsp file」の違いは何ですか

何を使うべきかわかりません。 2つのページ-intro.jsp(1)とbooksList.jsp(2)があります。各ページに対して、コントローラークラスを1つ作成しました。最初のページには、2番目のページを開くボタンがあります。

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

最初の質問は:このボタンの正確性についてはわかりません。うまくいきますが、このボタンを押すと疑問符が表示されます。

2番目の質問は:そのボタンを押すと、次のアノテーションのメソッドが呼び出されます(2ページ目のコントローラー):

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

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

このメソッドで何を返す必要がありますか?つまり、最初のページから2番目のページにジャンプするにはどうすればよいですか?

  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?

結果は同じであることがわかります。これらの文字列はすべて同じページを提供しました(ページ2が開かれました)。どの場合に「リダイレクト」、「フォワード」、「page.jsp」を使用する必要がありますか?

また、 Post/Redirect/Get article を読みました。 POSTメソッド処理の後に「リダイレクト」を使用する必要がありますか?

20
Argamidon

最初の質問は、このボタンの正確性についてはわかりません。うまくいきますが、このボタンを押すと疑問符が表示されます。

OK、GET httpメソッドを使用するため、疑問符が挿入されます。リクエストペイロードでデータを渡すには、POSTメソッドを使用する必要があります。


return "redirect:/books";

クライアント(ブラウザ)に戻り、http応答を解釈して、リダイレクトURLを自動的に呼び出します

return "jsp/books/booksList";

JSPを処理し、HTMLをクライアントに送信します

return "forward:/books";

要求を転送し、サーバー側でURLを直接呼び出します。


どちらを使用するかを決定するには、各アプローチのいくつかの側面を考慮する必要があります。

転送:より高速で、クライアントブラウザが関与せず、ブラウザに元のURLが表示され、転送されたURLを使用してリクエストが転送されます。

リダイレクト:低速で、クライアントブラウザが関与し、ブラウザはリダイレクトされたURLを表示し、リダイレクトされたURLへの新しいリクエストを作成します。

35
Marcelo Keiti