SpringBoot教程之网络技术深入解析篇八


教程之网络,技术深入解,析篇八,竞技宝官网网址,竞技宝网页入口,竞技宝网页地址,竞技宝app下载


在Spring Boot的系列教程中,我们已探讨了Web相关的知识,从第1到第7部分,内容涵盖了从浏览器发送请求,如何适配后端接口,请求参数如何与接口参数绑定,到接口处理数据后,如何将返回值发送回浏览器,以及如何与浏览器的接收类型适配,最终形成一个闭环。在第7部分中,我们主要研究了使用注解@ResponseBody时,返回值是如何转换为浏览器能接收的数据类型的。本章将深入探讨视图解析的原理和流程。


在本章中,我们关注的是使用@Controller注解而不是@RestController注解的类。在第7部分中,由于使用了@ResponseBody,数据直接由ServletInvocableHandlerMethod对象的invokeAndHandle方法输出。具体来说,这是通过RequestResponseBodyMethodProcessor对象的handleReturnValue方法实现的,它将数据转换为浏览器能接受的类型,并通过方法直接写出去。


🪐

一、公共逻辑


HandlerMethodReturnValueHandlerComposite类中的handleReturnValue方法开始出现差异。


二、使用@ResponseBody注解的处理逻辑


@ResponseBody注解对应RequestResponseBodyMethodProcessor处理类型中的public boolean supportsReturnType(MethodParameter returnType)方法,用于判断是否支持解析返回值。这个方法的判断条件是有没有使用ResponseBody这个注解。通过这个类的判定方法后,接下来会调用这个类对接口返回数据的处理。


三、未使用@ResponseBody的处理逻辑


未使用@ResponseBody注解时,对应ViewNameMethodReturnValueHandler类的处理逻辑。首先会调用其判定方法,判断是否支持当前接口返回数据的处理。


当公共逻辑方法invocableMethod.invokeAndHandle(webRequest, mavContainer, new Object[0]);执行完毕后,会进入RequestMappingHandlerAdapter类中的invokeHandlerMethod方法。


在处理派发结果逻辑中,一旦获取了视图对象,就会调用自定义的render进行页面渲染工作。


🙄

总的来说:


1、返回值以forward:开头的,将会由new InternalResourceView(forwardUrl)处理,这个对象中的处理方法调用的也是request.getRequestDispatcher(path).forward(request, response),即原始的servlet转发方法。


2、返回值以redirect:开头的,将会以new RedirectView()这个对象进行处理,调用里面的reder方法,使用原始的response.sendRedirect(encodedURL)方法进行转发。


3、其他如使用Thymeleaf模板引擎的情况则不再详述。


一、视图解析原理流程


(1)在目标方法处理过程中,所有数据都会被放在ModelAndViewContainer中,包括数据和视图地址。


(2)方法的参数是一个自定义类型对象(从请求参数中确定),然后重新放在ModelAndViewContainer中。


(3)任何目标方法执行完成后都会返回ModelAndView(数据和视图地址)。


(4)processDispatchResult处理派发结果(页面如何响应)。


        1、render(mv, request, response);进行页面渲染逻辑。


                1、根据方法的String返回值得到View对象【定义了页面的渲染逻辑】。


                        1、所有的视图解析器尝试是否能根据当前返回值得到View对象。


                        2、得到了redirect:/main.html --> Thymeleaf new RedirectView()。


                        3、ContentNegotiationViewResolver内部包含了所有视图解析器,内部还是利用所有视图解析器得到视图对象,竞技宝app下载


                        4、view.render(mv.getModelInternal(), request, response);视图对象调用自定义的render进行页面渲染工作,竞技宝官网网址


                                a、RedirectView如何渲染【重定向到一个页面】。


                                b、获取目标url地址。


                                c、response.sendRedirect(encodedURL)。


竞技宝app下载  竞技宝网页地址  竞技宝网页入口
标签云:#教程之网络 #技术深入解 #析篇八
最新文章: