Spring MVC 控制器:"return forward"、"return redirect" 和 "return jsp file" 之间有什么区别

Spring MVC Controller: what is the difference between "return forward", "return redirect" and "return jsp file"

我不明白我应该使用什么。 我有两个页面 - intro.jsp(1) 和 booksList.jsp(2)。我为每个页面创建了一个控制器 Class。 第一页有打开第二页的按钮:

<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通过这种方法做什么?换句话说,我怎样才能从第一页跳到第二页?

  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 方法处理后是否必须使用“重定向”?

The first question is: I am not sure about correctness this button. It works well, but I have question mark after press this button.

好的,这是插入一个问号,因为您使用的是 GET http 方法。您需要使用 POST 方法来传递请求负载中的数据。


return "redirect:/books";

它returns到解释http响应并自动调用重定向的客户端(浏览器)URL

return "jsp/books/booksList";

它处理 JSP 并将 HTML 发送给客户端

return "forward:/books";

它传递请求并直接在服务器端调用URL。


要决定使用哪一种,您必须考虑每种方法的某些方面:

转发:速度更快,客户端浏览器不参与,浏览器显示原件URL,请求转发做转发URL.

Redirect:比较慢,涉及到客户端浏览器,浏览器显示重定向的URL,它创建一个新的请求到重定向的URL。