目录
🌴前言
上一篇博客我们使用了拦截器,那么拦截器是如何实现拦截的呢?
接下来我们将从源码来看一下是如何实现拦截的。
🎋了解DispatcherServlet源码
当我们启动服务,进行访问时,我们查看日志,可以看到如下情况

我们知道,Tomcat是一个Web容器,里面装了很多项目,假如有a,b,c三个项目,当Tomcat一启动,就会把这个三个项目都启动起来,假如这个三个项目中都有一个"/user/login"接口,当我们请求这个接口时,都不知道请求的是哪个项目的接口,所以会有一个servlet path,也就是说每一个项目统一加一个前缀,比如说访问a就是"/a/user/login";那么"/a"就是context path,"/user/login"就是servlet path。
由于呢当前的Tomcat中只有这一个项目,所以context path为"/",也就是在访问接口的时候,前面没有任何前缀
发送一个请求在查看日志:
当Tomcat启动之后,有⼀个核心的类DispatcherServlet,它来控制程序的执行顺序.
所有请求都会先进到DispatcherServlet,执行doDispatch调度⽅法.
如果有拦截器,会先执⾏拦截器preHandle() 方法的代码,如果 preHandle() 返回true,继续访问controller中的⽅法.
controller当中的⽅法执⾏完毕后,再回过来执行 postHandle() 和afterCompletion() ,返回给DispatcherServlet,最终给浏览器响应数据
DispatcherServlet的生命周期:init(初始化),service(业务处理),destroy(销毁)
🚩初始化
DispatcherServlet的初始化⽅法init()在其⽗类HttpServletBean中实现的
主要作⽤是加载web.xml中DispatcherServlet的配置,并调用子类的初始化.
web.xml是web项⽬的配置⽂件,⼀般的web⼯程都会⽤到web.xml来配置,主要⽤来配置 Listener,Filter,Servlet等, Spring框架从3.1版本开始⽀持Servlet3.0,并且从3.2版本开始通过配置 DispatcherServlet, 实现不再使⽤web.xml
DispatcherServlet相应继承关系如下:

最低0.47元/天 解锁文章
2219

被折叠的 条评论
为什么被折叠?



