Spring MVC 控制器:"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";
   }
}

我应该用这种方法返回什么?换句话说,我怎样才能从第一页跳到第二页?

  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/Rerect/Get的文章。我必须使用";重定向";POST方法处理后??

第一个问题是:我不确定这个按钮是否正确。它效果很好,但按下这个按钮后我有问号。

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


return "redirect:/books";

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

return "jsp/books/booksList";

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

return "forward:/books";

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


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

转发:速度更快,不涉及客户端浏览器,浏览器显示原始URL,请求传输到转发的URL。

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

最新更新