过滤器FilterDispacher
在req传入前提前过滤掉一些信息,或者设置一些参数,然后再传入Action进行业务逻辑,如过滤非法的URL(用户登录控制),统一设置字符集,去掉一些非法字符
拦截器Interceptor
Action方法前、后或者抛出异常时,调用一个方法完成业务逻辑的操作,如国际化、输出验证、文件上传
两者区别
- 过滤器基于函数回调,拦截器基于反射机制
- 过滤器倚赖Servlet容器,拦截器不依赖
- 过滤器对所有的请求起作用,拦截器只是对Action起作用,但是拦截器可以访问Action的上下文、值栈里面的对象,过滤器不能访问。
- 在Action生命周期,过滤器只能在容器中初始化一次,拦截器可以多次调用。
执行过程
过滤-拦截-Action处理-拦截-过滤
首先把客户端提交的内容进行过滤,未登录用户不能访问内部页面的处理,过滤通过后,拦截器将检查用户提交数据的验证,做一些前期的数据处理,接着把处理后的数据发给对应的Action。Action处理完成返回后,拦截器还可以做其他过程,再向上返回到过滤器的后续操作。