只要用到了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一直充当一个调度员,调度器的角色,他就好比一个程序员在调用各种类的各种方法一样,本次博客全是本人理解,若有不当之处,还请指出。