天天看点

Spring拦截器与过滤器等总结

    对servlet、filter、listener、context-param都是配置在web.xml文件中,而aop、interceptor是配置在配置文件中,这样就是涉及到一个加载顺序的问题。1、对于配置在web.xml文件中的四个,context-param:它用于向Servelt-context提供键值对信息,即应用程序的上下文信息。Listener,filter等在初始化时会用到这些上下文信息。2、Context-param配置节点可以写在任意位置。3、因此真正的加载顺序:context-param----> listener---->filter---->servlet 

一、细节概念:

1、servlet: 流程是短的,url传来之后就对其进行处理,之后返回后转向到某一自己指定的页面。

2、Filter:流程是线性的,它就像是一个职责链,url传来之后进行预处理,然后传给下一个filter继续执行,而servlet处理之后,不会继续向下传递。

3、listener:如果说servlet与filter是查找url进行操作,则listener就是监听对象的动作进行触发操作,有点类似于数据库中的触发器,例如在session中创建和更改一些事情

4、interceptor:拦截器是动态拦截Action调用对象。它提供了一种机制使得开发者可以定义action之前或之后执行的代码。也可以在一个在action执行前阻止其执行。 

二、作用对象

1、针对URL:servlet、filter都是针对url进行的操作,这点我们可以从配置我从配置中就可以知道,因为这两个配置都需要配置url-pattern。

2、针对对象:listener是针对对象的操作,它是在某个对象发生、某些动作的时候执行,所以listener是提前封装好的对特定对象的操作,只需要声明名称和类的位置即可

3、针对action:interceptor是针对action对象进行操作,他在配置的时候需要和action一起配置才能启作用,当页面提交action时候,进行过滤操作 

三、作用范围

1、servlet:一般是针对特定的url进行操作,所以他需要在jsp中指定servlet的地址才能进行跳转过去执行 

2、filter:一般是对所有的url进行操作,它是对所有url进行的一个操作,所以filter是基于容器的操作,比如字符集过滤器等 

3、listener:一般是针对它所监听的对象进行的操作,但是项目已启动就进行监听,直到那个动作发生才执行操作,有点类似于“守株待兔”。 

4、interceptor:在action的方法执行之前后之后做一些处理,与过滤器filter比较类似,但是其有本质的区别:Filter的过滤范围比interceptor大,filter除了过滤请求外,通配符可以保护页面,图片,文件等等,而interceptor只能过滤自己配置好的请求。 

5、AOP:只能拦截spring管理bean的访问(业务层service) 

用法选择上的:根据作用对象、作用范围来考虑,选择使用那种结构!

继续阅读