弹簧MVC控制器:“向前返回”,“返回重定向”和“返回jsp文件”有什么区别

2022-09-01 20:42:23

我不明白我应该使用什么。我有两页 - 介绍.jsp(1)和书籍列表.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页被打开了)。在哪些情况下我应该使用“重定向”,“转发”,“页面.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创建新请求。


答案 2

推荐