Spring MVC 请求流程 - processDispatchResult

本文详细介绍了SpringMVC中视图渲染的过程,包括如何获取视图名称、使用视图解析器将逻辑视图名转换为物理视图路径、以及最终如何渲染视图等内容。

阅读本文需要 5 分钟
tips:本文属于 Spring MVC 请求流程 - 基于源码解读 的小分支

前言

processDispatchResult 的主要作用:

  • 获取视图名称
  • 渲染视图

调用过程

DispatcherServlet#processDispatchResult =》 DispatcherServlet#render
render 方法先通过 resolveViewName 方法获取视图名称,然后再调用 Viewrender 方法渲染视图

  • 获取视图名称
    在这里插入图片描述
  • 渲染视图
    在这里插入图片描述

关键代码

  • 视图解析器将逻辑视图转换为物理视图
    org.springframework.web.servlet.view.UrlBasedViewResolver#buildView
    在这里插入图片描述

  • 生成视图之前还会对重定向和转发做特别处理
    org.springframework.web.servlet.view.UrlBasedViewResolver#createView
    在这里插入图片描述

  • 渲染视图
    org.springframework.web.servlet.view.AbstractView#exposeModelAsRequestAttributes
    在这里插入图片描述

Circular view path [test]: would dispatch back to the current handler URL [/test] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.) at org.springframework.web.servlet.view.InternalResourceView.prepareForRendering(InternalResourceView.java:210) ~[spring-webmvc-6.2.10.jar:6.2.10] at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:148) ~[spring-webmvc-6.2.10.jar:6.2.10] at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:314) ~[spring-webmvc-6.2.10.jar:6.2.10] at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1438) ~[spring-webmvc-6.2.10.jar:6.2.10] at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1168) ~[spring-webmvc-6.2.10.jar:6.2.10] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1106) ~[spring-webmvc-6.2.10.jar:6.2.10] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) ~[spring-webmvc-6.2.10.jar:6.2.10] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[spring-webmvc-6.2.10.jar:6.2.10] at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) ~[spring-webmvc-6.2.10.jar:6.2.10] at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) ~[tomcat-embed-core-10.1.44.jar:6.0] at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-webmvc-6.2.10.jar:6.2.10]
最新发布
09-13
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

火车站卖橘子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值