"return new ModelAndView("redirect:surveys.html"); 之间有啥区别?和“返回新的 ModelAndView(“survey

Posted

技术标签:

【中文标题】"return new ModelAndView("redirect:surveys.html"); 之间有啥区别?和“返回新的 ModelAndView(“surveys.html”);”【英文标题】:What's the diference between "return new ModelAndView("redirect:surveys.html");" and "return new ModelAndView("surveys.html");""return new ModelAndView("redirect:surveys.html"); 之间有什么区别?和“返回新的 ModelAndView(“surveys.html”);” 【发布时间】:2014-04-01 06:06:49 【问题描述】:

问题在标题中。我有一个 Spring MVC Web 应用程序,我必须修改很多东西,我对此很陌生,在做任何事情之前我试图了解它是如何制作的。

两者有什么区别:

return new ModelAndView("redirect:surveys.hmtl");

return new ModelAndView("surveys.html");

谢谢。

【问题讨论】:

【参考方案1】:

第一个重定向:

                  POST or GET
browser -------------------------------------> spring controller

         redirect to surveys.html (status = 302)
        <------------------------------------

                  GET
        -------------------------------------> surveys.html

                  final page
        <-------------------------------------

第二个转发:

                    POST or GET
browser -------------------------------------> spring controller
                                                     |
                                                     |
                    final page                       V
        <------------------------------------- surveys.html

【讨论】:

【参考方案2】:

重定向 - 向客户端发送 http 302 重定向。然后客户端将使用给定的 url 向服务器发送一个新请求。

return new ModelAndView("surveys.html"); 指示 spring 将此视图返回给客户端

【讨论】:

【参考方案3】:

程序员的角度来看是这样的

return new ModelAndView("redirect:surveys.hmtl"); 当您使用重定向时,您会将您的控制器重定向到另一个适用于重定向 url 的控制器。简单地说,您可以拥有处理该路径的控制器。该控制器将被解雇。并且可以重定向到另一个页面。然后在 HTTP 响应中,您可以看到重定向状态 3xx 而不是正常情况下的 200。

return new ModelAndView("surveys.html");

当您不使用重定向时,您只会调用 View 部分并显示您的 html。有http响应200/OK状态。

【讨论】:

以上是关于"return new ModelAndView("redirect:surveys.html"); 之间有啥区别?和“返回新的 ModelAndView(“survey的主要内容,如果未能解决你的问题,请参考以下文章

java return () -> system.out.println("");

为啥idea中的vue用不了new vue的格式

VueJS:同时使用 v-model 和 :value

python 列表分组方法

JavaScript 的 new date() 和 date() 为啥输出不一样?

ACE_TAO 013 ACE_NEW_RETURN