了解web容器启动过程:
Servlet规范定义了一套API标准,这一标准的实现通常称为servlet容器。
通常web项目启动,
1.容器(如tomcat)回去读他的配置文件web.xml。读两个节点:<listener/>和<context-param/>。
2.然后容器会创建一个ServletContext(作为全局上下文和spring容器的宿主环境)。当执行Servlet的init()方法,会触发
ServletContextListener的contextInitialized方法。
3.容器会将<context-param></context-param>转化为键值对,交给servletContext。
4.容器会创建<listener></listener>类实例,该监听器必须实现ServletContextListener接口。
5.spring项目中配置的listener为ContextLoaderListener监听器。
ContextLoaderListener实现了contextInitialized方法
可以看到这里初始化根上下文(即spring Ioc容器)webApplicationContext。
总结:
1.监听器上面已经提到,Listener是servlet规范定义的特殊类,主要用于监听ServletContext,HttpSession,ServletRequest 等域对象创建和销毁的过程。很多项目listener实现用于项目初始化资源等。
2.项目启动 监听器-> 过滤器 -> 拦截器
3.过滤器和拦截器的区别:
过滤器依赖于Servlet容器,而拦截器依赖框架容器(如spring)
过滤器基于函数回调实现,拦截器基于java反射原理
过滤器可以过滤任何请求,拦截器只能针对action请求
拦截器可以访问action上下文,值栈里的对象,过滤器不能
拦截器可以获取ioc容器中的各个bean,过滤器不能。
注:filter在容器tomcat容器启动加载,servlet是在请求是才创建。servlet.service()方法会调用filter进行过滤。