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-адрес.