spring MVC如何解析视图,View视图源码解析

spring MVC如何解析视图

试图是渲染数据模型展示给用户的组件,我们平时在控制器中写的return "success";返回的就是逻辑试视图,必须由视图解析器解析了视图,我们才能找到视图模型,例如:

<!-- 视图解析器对象 -->
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

这就是一个简单的视图解析器,我们控制器一般返回三种视图对象:

  • String
  • ModelAndView
  • View

而我们常用的View由两种:

  • InternalResourceView:转发视图
  • RedirectView:重定向视图

在DispatcherServlet处理这些视图时,都会将他们转化为ModelAndView视图,然后由视图解析器ViewResolver解析为视图对象,根据视图对象找到资源位置进行访问

InternalResourceView

我们返回字符串或者ModelAndView都是通过InternalResourceView方式,实现内部资源跳转,我们先介绍它

1.debug运行我们的程序

在这里插入图片描述
找到标蓝的方法,这就是我们解析视图名的重点,之前的过程都不是我们关注的重点,注意看这个方法: resolveViewName

2.resolveViewName()

进入该方法,看图中的标记,这个过程表示我们正在利用我们自定义的解析器解析视图
在这里插入图片描述
那么具体解析过程是怎样的呢?请继续往下看:
我们进入这个方法
在这里插入图片描述

3.

我们通过一张图片来解析view对象是怎样返回的
在这里插入图片描述
这个最终返回的view就对应上一个步骤的view对象,之后的执行步骤可以看我另一篇文章ModelAndView执行流程
这就是一个完整的解析InternalResourceView类型View的过程

RedirectView

下面一种情况:

@RequestMapping("/test")
    public String testModelAndView(){
        /*ModelAndView mav = new ModelAndView();
        mav.addObject("username","root");
        mav.setViewName("success");*/
        return "redirect:/index.jsp";
    }

与上面一样,我们进入resolveViewName()方法,再继续进入
在这里插入图片描述
我们进入对应的条件:在这里插入图片描述
然后返回该view,赋值给对应的view,一直返回
在这里插入图片描述

总结:

  • InternalResourceView:转发视图,通过创建请求转发对象rd.forward()进行转发
  • RedirectView:重定向视图,通过response.sedRedirect()进行重定向
发布了37 篇原创文章 · 获赞 11 · 访问量 3892

猜你喜欢

转载自blog.csdn.net/Alphr/article/details/104699360