Spring MVC Controller:“返回转发”、“返回重定向”和“返回jsp文件”有啥区别

Posted

技术标签:

【中文标题】Spring MVC Controller:“返回转发”、“返回重定向”和“返回jsp文件”有啥区别【英文标题】:Spring MVC Controller: what is the difference between "return forward", "return redirect" and "return jsp file"Spring MVC Controller:“返回转发”、“返回重定向”和“返回jsp文件”有什么区别 【发布时间】:2015-04-26 04:29:41 【问题描述】:

我不明白我应该使用什么。 我有两页 - 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 页已打开)。 在哪些情况下我应该使用“redirect”、“forward”、“page.jsp”?

我也读过Post/Redirect/Get article。 POST方法处理后是否必须使用“重定向”??

【问题讨论】:

“按下此按钮后出现问号”是什么意思?无论如何,由于您提交 /request-list,因此预计不会调用 /book 有问号 - 返回 localhost:8080/request-list**?** 我也没有调用 /book。我打电话给/书。此页面必须显示书籍列表。 【参考方案1】:

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

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


return "redirect:/books";

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

return "jsp/books/booksList";

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

return "forward:/books";

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


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

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

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

【讨论】:

谢谢,但我知道。我问 - 我应该在哪些情况下使用它们? 据我所知,我必须在数据更改后使用“重定向”。我说的对吗?

以上是关于Spring MVC Controller:“返回转发”、“返回重定向”和“返回jsp文件”有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

(04)Spring MVC之Get方式传参访问Controller,从Controller返回json串出现菱形问号(?????)乱码,解决方法。

深入理解Spring MVC Controller返回String类型导致中文乱码的问题。

深入理解Spring MVC Controller返回String类型导致中文乱码的问题。

Spring MVC @Controller中返回值为void类型

Spring MVC @Controller中返回值为void类型

Spring MVC - 如何在 Rest Controller 中以 JSON 形式返回简单字符串