上一篇博客大致讲了apache Tomcat如何将请求封装经过filter请求到servlet
这里说说到了Servlet如何处理。
先上一张类图。
这是Servlet到DispatcherServlet的继承关系,servlet里面有一个init方法,一般在第一次请求来得时候调用(有特殊情况,load-on-startup的值大于0的时候在实例化servlet调用)。
在init方法里使用了Spring最爱用的模板模式,子类去实现父类留好的模板方法,实现自己的特殊操作,对应到DispatcherServlet就是一些初始化,比如关键的如何让url对应到Controller的方法上的initHandlerMapping()方法等。
接下来看另一个相似的图
一样的结构,不同的时这里我们讲的是service方法的实现。
service方法就是本文最开始提到的tomcat里执行完filter然后执行Servlet的service方法。
同样的模板方法,在httpServlet类里封装了对GET POST请求不同的处理,普通的Servlet实现直接继承即可。
在后面的继承关系中,最后又将其封装非processRequest方法,直到子类最后关键的实现doDispatch()这一关键的实现。
关于doDispatch()方法,后续继续更新。