一.Servlet简介
DispatherServlet在org.springframework.web.servlet包下,在spring-mvc模块下面,一个普通的ssm项目你可以通过web.xml对其进行配置,Spring-boot项目直接用类DispatcherServletAutoConfiguration进行配置,SpringBoot有个spring-autoConfig模块,使用配置类的方式,默认会拦截所有请求,调用 doService方法。
二.DispatherServlet如何实现调度的
在doService方法内先进行准备工作,然后调用doDispath方法, 看下方法里面都执行了什么
首先通过request去找相应的MapperHandler,找不到就写一个404在respon里面,看getHandler怎么执行的
通过一个HandlerMapping集合,遍历 集合中的HandlerMaping去找相应的HandlerExcutionChain,
然后调用HandlerExcutionChain的getHandler()方法获取相应的Handler,然后获取相应的适配器,具体代码如下:
HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());
然后执行applyPreHandle方法,获取所有的拦截器,然后执行preHandler方法,之后才是执行适配器的handle()方法,返回一个ModelAndView代码如下:
ModelAndView mv = ha.handle(processedRequest, response, mappedHandler.getHandler());
然后执行postHandle()方法,这里可以看出来拦截器的执行时机,代码如下:
mappedHandler.applyPostHandle(processedRequest, response, mv);