《面试1v1》SpringMVC

news2024/11/23 4:01:08

🍅 作者简介:王哥,CSDN2022博客总榜Top100🏆、博客专家💪
🍅 技术交流:定期更新Java硬核干货,不定期送书活动
🍅 王哥多年工作总结:Java学习路线总结, 点击 突击面试
🍅 数十万人的面试选择: 面试说人话系列《面试1v1》

在这里插入图片描述

我是 javapub,一名 Markdown 程序员从👨‍💻,八股文种子选手。


《面试1v1》 连载中…


我是 javapub,一名 Markdown 程序员从👨‍💻,八股文种子选手。

面试官: 早上好!我是今天的面试官,请问你叫什么名字,对 SpringMVC 了解吗?

候选人: 早上好面试官!我叫小明,对 SpringMVC 有一定的了解,它是 Spring Framework 的一部分,是基于 Java 的 MVC 轻量级 Web 框架。

面试官: 那你能解释一下 SpringMVC 的工作原理吗?

候选人: SpringMVC 的工作原理是:

  1. 用户发送请求至前端控制器 DispatcherServlet。
  2. DispatcherServlet 根据请求信息调用 HandlerMapping,解析请求对应的 Handler。
    //HandlerMapping
    public interface HandlerMapping {
        HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception;
    }
  1. HandlerMapping 返回 HandlerExecutionChain 对象,包含 Handler 处理器和 HandlerInterceptor 拦截器。
  2. DispatcherServlet 调用 HandlerAdapter 进行 Handler 适配。
    //HandlerAdapter
    public interface HandlerAdapter {
        boolean supports(Object handler);
        ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;
    }  

  1. HandlerAdapter 执行 Handler 和 HandlerInterceptor,并返回 ModelAndView。
  2. ViewResolver 解析 ModelAndView,返回 View。
  3. DispatcherServlet 根据 View 进行视图渲染,响应用户。

面试官: 你对 SpringMVC 的类和接口还挺了解的嘛!那你说说 DispatcherServlet、HandlerMapping、HandlerAdapter、ViewResolver 分别是什么?

候选人: 好的,以下是这几个组件的详细说明:
DispatcherServlet:前端控制器,接收请求并相应结果,整个流程控制的中心,由它调用其它组件处理用户的请求。

public class DispatcherServlet extends FrameworkServlet {
    // ...
}

HandlerMapping:请求映射到 Handler 的适配器,根据请求信息匹配 Handler。

public interface HandlerMapping {
    // 根据请求返回 HandlerExecutionChain 对象
    HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception; 
}

HandlerAdapter:Handler 适配器,调用Handler 处理请求,封装请求信息,返回 ModelAndView。

public interface HandlerAdapter {
    boolean supports(Object handler); 
    // 调用 Handler 处理请求      
    ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;
}

ViewResolver:View 解析器,将逻辑视图名解析为具体 View 实现。

public interface ViewResolver {
    View resolveViewName(String viewName, Locale locale) throws Exception;
}

所以,这四个组件协同工作,将请求发送给适合的 Handler,Handler 返回处理结果 ModelAndView,再由 ViewResolver 解析为View,最后由 DispatcherServlet 将结果响应给用户。

DispatcherServlet 如同总指挥,负责转发请求到各个组件,真正干活的其实是 HandlerMapping、HandlerAdapter 和 ViewResolver 这三个家伙。

面试官: 原来如此,你解释的很透彻,让我对 SpringMVC 的工作原理有了更深的理解。那么 SpringMVC 的请求处理流程你能画一个示意图来表示一下吗?

这里是 SpringMVC 的请求处理流程示意图:

SpringMVC请求处理流程

详细流程说明:

  1. 用户发送请求到 DispatcherServlet。
  2. DispatcherServlet 根据请求信息调用 HandlerMapping,解析 Handler。
  3. HandlerMapping 返回一个 HandlerExecutionChain,包含 Handler 和 HandlerInterceptor 列表。
  4. DispatcherServlet 调用 HandlerAdapter 执行 Handler。
  5. Handler 返回一个 ModelAndView。
  6. ViewResolver 解析 ModelAndView 中的 View 名称,获取 View 对象。
  7. View 对象负责填充 Model 数据并渲染视图。
  8. DispatcherServlet 响应用户。

在这个流程中,HandlerMapping 根据请求找到正确的 Handler;HandlerAdapter 负责具体 Handler 的执行;ViewResolver 找出正确的 View;View 负责数据填充和呈现结果。

DispatcherServlet 作为整个流程的控制器,把请求转发到各个组件,并最终返回响应。所以 DispatcherServlet 是 SpringMVC 的核心,负责将请求映射到对应的处理器,并把响应返回给客户端。

面试官: 非常精彩!你通过详细的说明和示意图,让我完全明白了 SpringMVC 的请求处理流程,而且你对每个组件的职责也描述得非常透彻。看来你对 SpringMVC 有很深入的理解,这对一个入门的开发者来说很难得。

在这里插入图片描述

最近我在更新《面试1v1》系列文章,主要以场景化的方式,讲解我们在面试中遇到的问题,致力于让每一位工程师拿到自己心仪的offer,感兴趣可以关注JavaPub追更!


《面试1v1》 连载中…


🎁目录合集:

Gitee:https://gitee.com/rodert/JavaPub

GitHub:https://github.com/Rodert/JavaPub

http://javapub.net.cn

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/684463.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【电子取证篇】电子数据取证标准(国家标准GB/T)

【电子取证篇】电子数据取证标准(国家标准GB/T) ​ 电子数据取证国家标准,此次更新把名称由"电子物证"更改成了"电子数据",避免了不同部门不同行业因为不同叫法而辩论个不停,后续标准的更新应该会…

JUC高级-0624

10. ThreadLocal(线程局部变量) 10.1 ThreadLocal基础 大厂面试题 ThreadLocal中 ThreadLocalMap的数据结构和关系?ThreadLocal的key是弱引用,这是为什么?ThreadLocal内存泄露问题你知道吗?ThreadLocal中…

clickhouse初探

背景 目前公司用的是influxdb来存储时序数据,但是influxdb太坑了,查一天的数据就开始内存猛涨,然后就炸了,查询语句也不适应。因此调研了tdengine,还把influxdb和tdengine做了性能对比。 结果嘛 ,首先tden…

C语言:位操作----将某一位置1或置0

C语言 基础开发----目录 前期准备 想要将将某一位置1或置0&#xff0c;需要进行位操作。 此次需要用到 与(&)&#xff0c;或(|)&#xff0c;左移(<<)和右移(>>) 这四个位操作。 具体位操作说明&#xff1a;C语言&#xff1a;位运算符----与(&)&#xff…

5年资深Android开发,转行逆向开发该如何学习?

Android逆向是什么&#xff1f; 简单地来说&#xff0c;安卓逆向是对已经打包好的APP进行反编译、源码分析了解APP实现逻辑的一门技术。我们可以把安卓安装时用到的APK文件看作一个加密后的压缩包&#xff0c;逆向就是要最大程序地还原出APK打包之前的源码。 逆向需要用到解密…

[Web程序设计]实验: Web基础

一、实验目的 &#xff08;1&#xff09;掌握开发工具的安装和配置 &#xff08;2&#xff09;熟悉程序的编写&#xff0c;运行和访问方法&#xff1b; 二、实验内容 &#xff08;1&#xff09;请编写出一个HTML页面&#xff0c;令其输出“hello world!~~”&#xff0c;使用…

略施小计,拥有自己的GPT

ChatGPT一经发布就在AI圈引起轰动&#xff0c;GPT-4和chagpt-plugin让OpenAI和其他同行拉开了更大的差距。由于某些原因&#xff0c;我们可能无法亲身体验ChatGPT的神奇之处。但现在&#xff0c;如果你还没有体验过ChatGPT&#xff0c;就像10年前没有购买比特币一样&#xff08…

SuperMap GIS基础产品WebGIS FAQ集锦(3)

SuperMap GIS基础产品WebGIS FAQ集锦&#xff08;3&#xff09; 【iClient】iClient for Leaflet,如何修改map的默认渲染方式&#xff1f; 【解决办法】map的默认渲染方式取决于浏览器支持&#xff0c;可通过renderer属性设置&#xff0c;设置为L.SVG或L.Canvas 【iClient】le…

k8s 学习九,pod 知识点 上

在 K8S 中&#xff0c; pod 是一个非常关键的存在&#xff0c;我们一起来看看 pod 具体是个什么&#xff1f; pod 是个啥&#xff1f; pod 是个什么呢&#xff1f;pod 是 K8S中的一个核心概念 每一个 pod 都会有一个特殊的根容器&#xff0c;叫做 pause 容器&#xff0c;paus…

云原生:深入掌握Docker日志管理:高效策略与最佳实践

前言 在docker的整个生命周期中&#xff0c;超过70%的时间&#xff0c;我们都是在用docker进行运维工作&#xff0c; 查看docker的日志&#xff0c;是运维中的必会技能。 docker日志分为&#xff1a; docker引擎日志应用日志 今天我们重点来讨论下docker的日志使用&#xf…

【博客672】prometheus使用数据外推与兼容跳变重置来优化处理窗口函数(rate,irate,increase)

prometheus使用数据外推与兼容跳变重置来优化处理窗口函数(rate&#xff0c;irate&#xff0c;increase) 场景 以下是用于计算计数器增长率的三个函数之间差异的高级概述&#xff1a; rate()&#xff1a;这计算每秒的增长率&#xff0c;在整个提供的时间窗口内平均。示例&am…

谷歌推出“能讲会听”的大语言模型AudioPaLM,实现语音理解和生成

出品人&#xff1a;Towhee 技术团队 作者&#xff1a;顾梦佳 近日&#xff0c;谷歌推出了一个能够理解并生成语音理解的大型语言模型——AudioPaLM。这一模型融合了分别基于文本和语音两种语言模型——PaLM-2 和 AudioLM&#xff0c;形成了一个统一的多模态架构。该模型不仅能对…

@monthly /root/.cfg/./dealer病毒清除

登录服务器时&#xff0c;ssh提示密码不对&#xff0c;就去控制台检查&#xff0c;查看到虚拟平台中多台服务器提示虚拟机CPU使用告警&#xff0c;占用过高。远程无法登录。 原因分析&#xff1a;所有中毒的均为linux服务器&#xff0c;密码设置过于简单&#xff0c;防火墙关闭…

【算法题】统计各位数字之和为偶数的整数个数、替换空格、旋转数组的最小数字

算法题之数字处理 一、统计各位数字之和为偶数的整数个数1.1、题目1.2、理解题目1.3、解题思路&#xff08;暴力枚举&#xff09;1.4、解题思路2&#xff08;数学公式&#xff09;1.5、小结 二、替换空格2.1、题目2.2、解题&#xff1a;遍历原地修改 三、旋转数组的最小数字3.1…

如何判断TongWeb是否支持某种数据库?

起因&#xff1a; 数据库连接池本是一项成熟的技术&#xff0c;但随着数据库厂家、种类的增加&#xff0c;常常被问到TongWeb是否支持XX数据库&#xff1f; 说明&#xff1a; 数据库连接池的基本思路是&#xff0c;平时建立适量的数据库的连接&#xff0c;放在一个集合中&…

举例说明,JS中的【return true】和【return false】的【使用场景】

1.return true和return false都是写在函数里面 2.如果一个函数需要有返回值&#xff0c;则函数中需要写return相关 3.return true和return false是之后调用这个函数判断用&#xff1a; 如果一个函数需要返回值&#xff0c;则需要在函数中添加return 如果函数中添加的是 比如 …

2-css-4

一 标准流 标准流也叫文档流&#xff0c;指的是标签在页面中默认的排布规则&#xff0c;例如&#xff1a;块元素独占一行&#xff0c;行内元素可以一行显示多个。 二 浮动 1 认识 作用&#xff1a;让块元素水平排列。 属性名&#xff1a;float 属性值 left&#xff1a;左…

跳槽过去,刚工作三天就被裁是一种怎样的体验

前言 还有谁&#xff1f;刚上三天班就被公司公司的工作不适合我&#xff0c;叫我先提升一下。 后面我也向公司那边讨要了一个说法&#xff0c;我只能说他们那边的说辞让我有些不服气。 现在之所以把这件事在csdn上记录一下&#xff0c;一是记录一下自己的成长轨迹&#xff0…

2023计算机组成原理【5-7】

第五章 中央处理器 1&#xff0e;指令周期的概念&#xff0c;与时钟周期、机器周期的区别。 指令周期是执行一条指令所需的时间&#xff0c;包括多个子阶段的时间总和时钟周期是计算机系统中的基本时间单位&#xff0c;由时钟信号控制&#xff0c;用于同步处理器和其他组件的操…

Collectors.toMap使用详解

这里写目录标题 一、使用规则二、源码及方法三、代码示例1.将list转成以id为key的map&#xff0c;value是id对应的Dept对象2.假如id存在重复值&#xff0c;则会报错Duplicate key xxx, 解决方案是3.想获得一个id和name对应的Map<Integer, String>4.把Dept集合按照group分…