执行流程图说明:
1)用户通过在浏览器中输出网址http://localhost:8080/hello,访问web容器中部署的servlet服务;
2)用户请求信息被web容器监听到,web容器会浏览器请求信息进行封装HttpServletRequest、响应信息会被封装到HttpServletResponse,并找到对应的servlet容器;
3)请求进入servlet容器会被listener监听到,listener分为两类:ServletRequestListener、ServletContextListener。
ServletRequestListener会在每次servlet请求过程中,都会执行它的#requestInitialized方法,然后交给filter去执行(spring随时可注入HttpServletRequest的原理基于此);
ServletContextListener会在servlet服务启动时,调用它的#contextInitialized()方法;在servlet服务关闭时,调用它的#contextDestroyed()方法(spring的ContextLoaderListener就是实现了此接口)。
4)然后请求被filter执行,调用filter#doFilter() before方法,filter的初始化时刻:“Servlet服务启动” 或 “第一次访问初始化”,根据依据1参数;
5)请求交给servlet#service()方法;
6)spring框架中的Interceptor在此执行;
7)servlet#service()方法执行完成后,会回到filter#doFilter() 的after方法;
8)执行ServletRequestListener#requestDestroyed()方法;
9)将请求响应反馈给浏览器;
10)当服务关闭时,会执行servlet的destory()、filter的destory()、ServletContextListener#contextDestroyed()。