1、Filter和Intercepter区别
先直接来总结下区别:
1、Filter是Servlet规范的一部分,而Interceptor是Spring等框架提供的;
2、Filter只能在Web应用中使用,而Interceptor没有这个限制,框架提供了就可以使用;
3、Interceptor归Spring管理可以使用IOC中资源,而Filter不能;
4、Filter的拦截粒度就是一个Filter类,Interceptor拦截粒度是方法。
主要的区别就是这么多,我们还可能关心使用场景,原则就是在Spring架构中,优先使用Interceptor,Interceptor不能满足的场景考虑Filter。
2、Java Web请求处理链上的组件加载顺序
加载顺序为:
context-param -> listener -> filter -> servlet
全局上下文参数当然是最先被加载的,
同一组件配置多个时,和mapping顺序一致,mapping必须写在其声明后面。
3、Tomcat中8个listener
1)监听 Session、request、context 的创建于销毁,分别为
HttpSessionLister、ServletContextListener、ServletRequestListener
2)监听对象属性变化,分别为:
HttpSessionAttributeLister、ServletContextAttributeListener、ServletRequestAttributeListener
3)监听Session 内的对象,分别为HttpSessionBindingListener 和 HttpSessionActivationListener。与上面六类不同,这两类 Listener 监听的是Session 内的对象,而非 Session 本身,不需要在 web.xml中配置。
有的listener是只会被调用一次,比如ServletContextListener,他是全局上下文监听器。
4、Filter
filter功能,它使用户可以改变一个 request和修改一个response. Filter 不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在离开 servlet后处理response.换种说法,filter其实是一个”servlet chaining”(servlet 链).
一个Filter包括:
1)、在servlet被调用之前截获;
2)、在servlet被调用之前检查servlet request;
3)、根据需要修改request头和request数据;
4)、根据需要修改response头和response数据;
5)、在servlet被调用之后截获.
5、Servlet
Servlet是单实例的,可以不配置其<servlet-mapping>节点,让其成为一个启动初始化作用的类。