Spring MVC Controller:“返回前进”,“返回重定向”和“返回jsp文件”之间的区别是什么

我不明白我应该用什么。 我有两个页面–intro.jsp(1)和booksList.jsp(2)。 对于每个页面,我创建了一个Controller类。 第一页有按钮,打开第二页:

第一个问题是:我不确定这个按钮的正确性。 它运作良好,但按下此按钮后我有问号。

第二个问题是:当我按下该按钮时,调用带有下一个注释的方法(第二页的控制器):

 @RequestMapping(value = "/books") @Controller public class BooksListController { @RequestMapping public String booksList() { return "jsp/books/booksList"; } } 

我应该通过这种方法返回什么? 换句话说,我如何从第一页跳到第二页?

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

第一个问题是:我不确定这个按钮的正确性。 它运作良好,但按下此按钮后我有问号。

好吧,它插入一个问号,因为你使用GET http方法。 您需要使用POST方法传递请求有效负载中的数据。


 return "redirect:/books"; 

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

 return "jsp/books/booksList"; 

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

 return "forward:/books"; 

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


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

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

重定向:速度较慢,涉及客户端浏览器,浏览器显示重定向的URL,它会向重定向的URL创建新请求。