Action的生命周期中,拦截器能多次调用,而过滤器只能在容器初始化时被调用一次。如何去理解?
以servlet为例,现在有Aservlet,Bservlet,A拦截器,X过滤器,过滤器匹配到符合自己url描述时执行,但是从servletA转到(forward)servletB的时候是不会再次进行调用的,并且从servletA再到servletB也不会调用,但是A拦截器是每次都执行的。
主要原因还是因为拦截器是基于java的反射机制的,而过滤器是基于函数回调所以拦截器就是每次执行到某servlet都响应所以可以多次,回调函数是调用的时候才会响应所以,那么过滤器调用时只有请求在第一次到达服务端进行分配的时候,所以在整个生命周期只有一次。
个人理解:因为过滤器是基于函数回调的,每一个请求都会创建一个action,当action执行完毕后才会进行函数回调,所以过滤器在action的生命周期中只会执行一次; 而拦截器则是对请求的拦截,每转发请求访问action时,拦截器都会被调用进行拦截,所以拦截器会被多次调用