你的一键三连是我巨大的动力!
面试相关题也好,八股文等等也好,我并不建议你单纯的去死记硬背,因为这些题和八股文本身可能是食之无味的,很难让你持续学下去,而且也难以去举一反三,但当你带上一点点的思考和理解为什么,能够活用里面的思想和理念,那么相信你一定会有一个质的飞跃。就像你的一键三连,嘿嘿。
什么是SpringMVC?
曾几何时,听到这个问题的我一度想 xxxxx…因为之类问题好像在问你,who are you?
额…面试官,其实SpringMVC就是…
SpringMVC是一种基于MVC架构模式,请求驱动类型的轻量级Web框架,使用了MVC架构模式思想,将web层职责解耦,基于请求驱动指的就是使用请求-响应模型
回答了这段就可以了吗,想必面试官还不满足,因为这段你都把自己回答懵了
其实类似这种 【什么是XXX】的提问,可以引出很多问题
SpringMVC有什么用?
于是我回想了在有了SpringMVC的这段日子…
初入Java Web那个时候总是需要针对Servlet做很多繁琐的操作,但是有SpringMVC好像渐渐的忘掉了这段历史了呢…
所以可以说 SpringMVC是对Servlet的封装 于是提供了
- 参数绑定
- 数据回显
- 上传文件
参数绑定
那时候的我们…
在Java Web时期,用到的Servlet如果要去获取参数,就需要用getParameter,而到了 SpringMVC这里, 我们只需要遵循:方法参数名与传递过来的name属性名相同 的规则。那么方法参数接收到的值就会传给Controller处理,这个过程就是参数绑定。
数据回显
想想Java Web那个时候都是用request.setAttribute值去回显到我们早期使用的JSP,到后面许多人用的thymeleaf模板引擎。而在我们SpringMVC中,我们是使用Model来把数据绑定request域对象中,以model.addAttribute()的方式。
上传文件
SpringMVC定义了MultipartFile接口,封装了上传文件需要使用Servlet处理各种繁琐操作的细节。
看到这里,最后,你还可以跟面试官说,嗯,SpringMVC很大程度上简化我们的开发,极大的提升了我们开发的效率。
仔细想想框架不都是干这事的吗?
问完了一个大的问题,通常面试官就会紧跟着来一个有深度的问题。
面试官:想必你看过SpringMVC源码,那么结合源码聊聊
SpringMVC的执行流程?
额…这…好吧
容我想想
对了,你有看到我的砖头吗
- 首先用户的请求会到达 DispatcherServlet 前端控制器处理
- DispacherServlet 接受到请求后,会根据 请求信息 HandlerMapping 处理器映射器
- HandleMapping根据用户url请求后,查找匹配该url的Handle,并返回一个执行链
- DispatcherServlet 再请求 处理器适配器HandlerAdapter 调用相应的Handler进行处理并返回ModelAndView给DispatcherServlet
- DispatcherServlet将请求 视图解析器 ViewResolver 解析,返回具体View
- DispatcherServlet 对 View 进行渲染视图,也将数据回显将模型到视图
- DispatcherServlet将页面响应给用户
放了张图在这了,要不面试官你自己慢慢看吧…
SpringMVC执行流程中的组件都是些什么?
DispatcherServlet 前端控制器
整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性。
回顾上面SpringMVC的请求处理流程,可以发现DispatcherServlet是站在C位的,不管处理什么,都是围绕DispatcherServlert来,而它也相当于MVC模式中的 C(Controller - 控制器)。
HandlerMapping 处理器映射器
HandlerMapping 负责根据用户请求url找到Handler处理器。方式:有配置、接口、注解等方式。
Handler 处理器
Handler对具体的用户请求进行处理。
HandlAdapter 处理器适配器
HandlerAdapter对处理器执行,通过适配器可以对更多类型的处理器进行执行。
ViewResolver 视图解析器
负责将处理结果生成View视图
View 视图
早期的JSP,现在的通过较流行的freemarkerView等等页面标签或页面模版技术将模型数据通过页面展示给用户
最后
我是一颗剽悍的种子,一个不想熬夜了的程序猿,谢谢这么可爱的你,还一键三连。