Spring MVC Controller: в чем разница между "return forward", "return redirect" и "return jsp file"

Я не понимаю, что я должен использовать. У меня две страницы - intro.jsp(1) и booksList.jsp(2). Для каждой страницы я создал один класс контроллера. На первой странице есть кнопка, которая открывает вторую страницу:

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

Первый вопрос: Я не уверен в правильности этой кнопки. Он работает хорошо, но после нажатия этой кнопки у меня есть вопросительный знак.

Второй вопрос:. Когда я нажимаю эту кнопку, вызывается метод со следующей аннотацией (контроллер для второй страницы):

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

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

Что я должен вернуть этим методом? Другими словами, как я могу перейти с первой страницы на вторую?

  • return "redirect:/books"; returns http://localhost:8080/books?
  • return "jsp/books/booksList"; returns http://localhost:8080/request-list?
  • return "forward:/books"; returns http://localhost:8080/request-list?

Я вижу, что результат тот же: все эти строки дали мне ту же страницу (страница 2 была открыта).  В каких случаях я должен использовать "перенаправление", "вперед", "page.jsp"?

Также я прочитал Сообщение/Перенаправление/Получить статью. Должен ли я использовать "перенаправление" после обработки метода POST?

Ответ 1

Первый вопрос: я не уверен в правильности этой кнопки. Это работает хорошо, но у меня есть вопросительный знак после нажатия этой кнопки.

Хорошо, он вставляет вопросительный знак, потому что вы используете метод GET http. Вам нужно использовать метод POST для передачи данных в полезной нагрузке запроса.


return "redirect:/books";

Он возвращается клиенту (браузеру), который интерпретирует ответ HTTP и автоматически вызывает URL-адрес перенаправления

return "jsp/books/booksList";

Он обрабатывает JSP и отправляет HTML клиенту

return "forward:/books";

Он передает запрос и вызывает прямой URL-адрес на стороне сервера.


Чтобы решить, какой из них использовать, вы должны рассмотреть некоторые аспекты каждого подхода:

Вперед: быстрее, браузер клиента не задействован, браузер отображает исходный URL-адрес, запрос передается с переадресованным URL-адресом.

Перенаправление: медленнее, браузер клиента задействован, браузер отображает перенаправленный URL-адрес, он создает новый запрос на перенаправленный URL-адрес.