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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 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一直充当一个调度员,调度器的角色,他就好比一个程序员在调用各种类的各种方法一样,本次博客全是本人理解,若有不当之处,还请指出。

相关文章
|
1月前
|
消息中间件 存储 缓存
大厂面试高频:Kafka 工作原理 ( 详细图解 )
本文详细解析了 Kafka 的核心架构和实现原理,消息中间件是亿级互联网架构的基石,大厂面试高频,非常重要,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:Kafka 工作原理 ( 详细图解 )
|
6天前
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
71 2
|
23天前
|
Java 程序员
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
小米,29岁程序员,分享了一次面试经历,详细解析了Java中&和&&的区别及应用场景,展示了扎实的基础知识和良好的应变能力,最终成功获得Offer。
56 14
|
1月前
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
|
1月前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
28天前
|
Java 编译器 程序员
Java面试高频题:用最优解法算出2乘以8!
本文探讨了面试中一个看似简单的数学问题——如何高效计算2×8。从直接使用乘法、位运算优化、编译器优化、加法实现到大整数场景下的处理,全面解析了不同方法的原理和适用场景,帮助读者深入理解计算效率优化的重要性。
30 6
|
26天前
|
安全 算法 网络协议
网易面试:说说 HTTPS 原理?HTTPS 如何保证 数据安全?
45岁老架构师尼恩在其读者交流群中分享了关于HTTP与HTTPS的深入解析,特别针对近期面试中常问的HTTPS相关问题进行了详细解答。文章首先回顾了HTTP的工作原理,指出了HTTP明文传输带来的三大风险:窃听、篡改和冒充。随后介绍了HTTPS如何通过结合非对称加密和对称加密来解决这些问题,确保数据传输的安全性。尼恩还详细解释了HTTPS的握手过程,包括如何通过CA数字证书验证服务器身份,防止中间人攻击。最后,尼恩强调了掌握这些核心技术的重要性,并推荐了自己的技术资料,帮助读者更好地准备面试,提高技术水平。
|
SQL 缓存 安全
Java高频面试题目
面试时面试官最常问的问题总结归纳!
151 0
JAVA高频面试题目集锦(6)
JAVA高频面试题目集锦(6)
145 0
JAVA高频面试题目集锦(6)