SpringBoot中对视图解析的看法

先贴个图 …

在这里插入图片描述

在SpringBoot中,会默认在容器中注入 视图解析器。

1.如果 没有 在配置文件中配置视图解析器的前后缀,

@RequestMapping("/success")
public String success(){
    System.out.println("controller - success 执行");
    return "hello";
}

① handler返回的ModelAndView 是”hello” ,默认是请求转发的方式。

② 如果返回的ModelAndView是 “forward:ok" ,也是请求转发

2.如果在配置文件中配置了视图解析器的前后缀:

spring:
  mvc:
    view:
      prefix: /
      suffix: .html

① handler返回的 ModelAndView 会只去和视图解析器进行匹配前后缀,即匹配路径是 hello.html

如果return后面的 ModelAndView在完成前后缀匹配完后没有找到某个页面,会怎么样?

@RequestMapping("/success")
public String success(){
    System.out.println("controller - success 执行");
    return "ok";
}

如上图,按理说会匹配一个 ok.html 页面的路径,但是在classpath下发现没有这个ok.html

那么直接会报错!!!它不会去再找有没有路径是 “/ok” 的 handler!!而是只报错!!!

同理 , SpringMVC也是这样的!

② 如果handler返回的ModelAndView 是 “forward:ok” ,就不会去匹配前后缀,直接就走请求转发

@RequestMapping("/success")
public String success(){
    System.out.println("controller - success 执行");
    return "forward:ok";
}


@RequestMapping("/ok")
@ResponseBody
public String ok(){
    System.out.println("Controller - ok 执行");
    return "ok";
}

综上:

在handler方法中,return返回的就是ModelAndView。

① 如果没有配置视图解析器的前后缀,不管ModelAndView是 “ok" 还是 ”foreword:ok",都是走请求转发。

② 如果配置了视图解析器的前后缀,如果ModelAndView是 “ok” ,视图解析器给它加上前后缀再去找这个页

​ 面。 如果ModelAndView是“forward:ok” ,视图解析器就走请求转发。

所以,为了不引起矛盾,也不让自己困惑是请求转发还是去添加前后缀找页面。以后想通过请求转发匹配

handler,就在ModelAndView中加上 “forward“ ;如果是想去找某一个页面,在写好前后缀后,就直接写

ModelAndView就行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值