java面试题之个人对SpringMvc的原理实现理解

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: java面试题之个人对SpringMvc的原理实现理解

只要用到了Spring,就肯定涉及到了web端,那就难免不涉及到SpringMvc,即使用SpringBoot,也不过是将mvc模块封装进了spring-mvc(一个依赖包)中,,使得xml不用配置,基于注解确实简单,但是面试官确认你会不会这个Spring的Web端的依据那就是问你面试题啦,一般都会问到SpringMvc的原理实现。

理解原理,首先一定要知道(不一定理解,知道做什么的就可以)以下几个组件:

1.DispatcherServlet:(Dispatcher Server Applet)调度服务程序,这个组件充当的作用就是一个中央调度器(调度的意思可以百度)的作用,负责接收前端传过来的url和参数,返回结果给前端,调度一下各种组件的功能。

2.HandlerMapping:处理器映射器(这个组件只负责查找),功能主要是查找Spring的Xml配置的或者是以注解形式声明的处理器(controller)和拦截器(interceptor),并返回到DispatcherServlet。

3.HandlerAdapter:处理器适配器(这个组件负责调用),功能是调用controller和intercepter,intercepter一般用来拦截请求和js,css什么的,执行完拦截器之后,将可执行的controller进行执行,执行完的controller返回的ModelAndView(模型和视图,可能是一个页面的路径,也可能是一种格式的数据,也可能是字符串)返回给DispatcherServlet。

4.Handler:具体的处理器(controller),用来处理具体的业务并返回ModelAndView。

5.ViewResolver:视图解析器,解析ModelAndView,可解析Freemaker(静态资源模板技术),jsp(集成html代码的java页面),excel等等成View视图返回给DispatcherServlet。

6.View :视图,View是一个接口,实现类支持不同的View类型(json、jsp、freemarker、excel...)

7.HandlerExecutionChain:执行链,是HandlerMapping根据xml配置或注解形式找到的Handler和Handler拦截器以之执行链的形式返回给DispatcherServlet。

知道了上边的几个组件,那么原理步骤就很容易解释了,几乎几句话就可以概括:

首先是前端的请求,DispatcherServlet接收到请求后,将url指向的地址转发并调度HandlerMapping进行查找处理器(此时查不到将

抛出路径不正确异常),HandlerMapping将查找到的处理器和拦截器返回给DispatcherServlet;

DispatcherServlet接收到处理器和拦截器后调用HandlerAdapter,HandlerAdapter执行完拦截器后(拦截器三个方法,第一个方法

preHandle负责拦截访问controller的请求,如果拦截器拦截了该controller,则404,另外两个方法自行百度)继续执行通过拦截器

的controller,执行完controller返回ModelAndView给DispatcherServlet。

DispatcherServlet接收到了ModelAndView,调用ViewResolver去解析ModelAndView,解析成的具体View再返回给

DispatcherServlet。

最后DispatcherServlet将View返回给前端处理。

如果你看了至少两遍,是不是感觉很好理解?最重要的DispatcherServlet一直充当一个调度员,调度器的角色,他就好比一个程序员在调用各种类的各种方法一样,本次博客全是本人理解,若有不当之处,还请指出。

相关文章
|
27天前
|
消息中间件 存储 缓存
大厂面试高频:Kafka 工作原理 ( 详细图解 )
本文详细解析了 Kafka 的核心架构和实现原理,消息中间件是亿级互联网架构的基石,大厂面试高频,非常重要,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:Kafka 工作原理 ( 详细图解 )
|
1月前
|
存储 Java 关系型数据库
高效连接之道:Java连接池原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。频繁创建和关闭连接会消耗大量资源,导致性能瓶颈。为此,Java连接池技术通过复用连接,实现高效、稳定的数据库连接管理。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接池的基本操作、配置和使用方法,以及在电商应用中的具体应用示例。
64 5
|
2月前
|
存储 算法 Java
Java HashSet:底层工作原理与实现机制
本文介绍了Java中HashSet的工作原理,包括其基于HashMap实现的底层机制。通过示例代码展示了HashSet如何添加元素,并解析了add方法的具体过程,包括计算hash值、处理碰撞及扩容机制。
|
29天前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
29天前
|
存储 安全 Java
面试高频:Synchronized 原理,建议收藏备用 !
本文详解Synchronized原理,包括其作用、使用方式、底层实现及锁升级机制。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
面试高频:Synchronized 原理,建议收藏备用 !
|
29天前
|
Java
Java之CountDownLatch原理浅析
本文介绍了Java并发工具类`CountDownLatch`的使用方法、原理及其与`Thread.join()`的区别。`CountDownLatch`通过构造函数接收一个整数参数作为计数器,调用`countDown`方法减少计数,`await`方法会阻塞当前线程,直到计数为零。文章还详细解析了其内部机制,包括初始化、`countDown`和`await`方法的工作原理,并给出了一个游戏加载场景的示例代码。
Java之CountDownLatch原理浅析
|
1月前
|
Java 索引 容器
Java ArrayList扩容的原理
Java 的 `ArrayList` 是基于数组实现的动态集合。初始时,`ArrayList` 底层创建一个空数组 `elementData`,并设置 `size` 为 0。当首次添加元素时,会调用 `grow` 方法将数组扩容至默认容量 10。之后每次添加元素时,如果当前数组已满,则会再次调用 `grow` 方法进行扩容。扩容规则为:首次扩容至 10,后续扩容至原数组长度的 1.5 倍或根据实际需求扩容。例如,当需要一次性添加 100 个元素时,会直接扩容至 110 而不是 15。
Java ArrayList扩容的原理
|
2月前
|
存储 监控 算法
美团面试:说说 G1垃圾回收 底层原理?说说你 JVM 调优的过程 ?
尼恩提示: G1垃圾回收 原理非常重要, 是面试的重点, 大家一定要好好掌握
美团面试:说说 G1垃圾回收 底层原理?说说你 JVM 调优的过程  ?
|
2月前
|
SQL 存储 关系型数据库
美团面试:binlog、redo log、undo log的底层原理是什么?它们分别实现ACID的哪个特性?
老架构师尼恩在其读者交流群中分享了关于 MySQL 中 redo log、undo log 和 binlog 的面试题及其答案。这些问题涵盖了事务的 ACID 特性、日志的一致性问题、SQL 语句的执行流程等。尼恩详细解释了这些日志的作用、所在架构层级、日志形式、缓存机制以及写文件方式等内容。他还提供了多个面试题的详细解答,帮助读者系统化地掌握这些知识点,提升面试表现。此外,尼恩还推荐了《尼恩Java面试宝典PDF》和其他技术圣经系列PDF,帮助读者进一步巩固知识,实现“offer自由”。
美团面试:binlog、redo log、undo log的底层原理是什么?它们分别实现ACID的哪个特性?
|
1月前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
58 2