示意图
简述
1. 请求在Host组件被StandardHostValve处理,依次调用后续其余组件,访问filterchain、servlet
2. 如果在后续请求中抛错,则被StandardHostValue try catch拦截异常处理,
3. 创建ApplicationDispatcher,调用forward方法
4. 触发filterchain的调用,并触发DispatcherServlet的service方法,完成servlet的寻找。
5. 根据dispatcherServlet中的urlMapping,找到对应的handler (等同于controller中的某个对应的方法) 。例 /error 请求对应 内置的BasicErrorController类
关键代码入口
1. StandardHostValve 处理异常请求的方法
org.apache.catalina.core.StandardHostValve#custom
作用:1. 创建ApplicationDispatcher 2.触发forward方法
2. org.apache.catalina.core.ApplicationDispatcher#invoke
作用:1.初始servlet 2.创建filterChain 3.触发filterChain调用
3. org.apache.catalina.core.ApplicationFilterChain#internalDoFilter
作用:1.完成filters依次调用 2.触发servlet调用service