phpstudy怎么做网站,无忧建站,网站建设外包,wordpress小标签1. 理解 拦截器 #xff1a;是在面向切面编程的时候#xff0c;在你的 service 或者一个方法前调用一个方法#xff0c;或者在方法后调用一个方法#xff1b;比如动态代理就是拦截器的简单实现#xff0c;在你调用方法前打印出字符串#xff08;或者做其它业务逻辑的操作… 1. 理解 拦截器 是在面向切面编程的时候在你的 service 或者一个方法前调用一个方法或者在方法后调用一个方法比如动态代理就是拦截器的简单实现在你调用方法前打印出字符串或者做其它业务逻辑的操作也可以在你调用方法后打印出字符串甚至在你抛出异常的时候做业务逻辑的操作。 过滤器是在 javaweb 中你传入的 request、response 提前过滤掉一些信息或者提前设置一些参数然后再传入 servlet 或者 struts 的 action 进行业务逻辑比如过滤掉非法url不是 login.do的地址请求如果用户没有登陆都过滤掉或者在传入 servlet 或者 struts 的 action 前统一设置字符集或者去除掉一些非法字符.。 2. 具体区别 拦截器是 AOP( Aspect-Oriented Programming) 的一种实现底层通过动态代理模式完成。 区别 1拦截器是基于 java 的反射机制的而过滤器是基于函数回调。 2拦截器不依赖于 servlet 容器而过滤器依赖于 servlet 容器。 3拦截器只能对 action 请求起作用而过滤器则可以对几乎所有的请求起作用。 4拦截器可以访问 action 上下文、值栈里的对象而过滤器不能。 5在 action 的生命周期中拦截器可以多次被调用而过滤器只能在容器初始化时被调用一次。 3. 本质区别 从灵活性上说拦截器功能更强大些Filter能做的事情他都能做而且可以在请求前请求后执行比较灵活。 Filter主要是针对URL地址做一个编码的事情、过滤掉没用的参数、安全校验比较泛的比如登录不登录之类太细的话还是建议用 interceptor。 不过还是根据不同情况选择合适的。 4. 摘要 Spring 的拦截器与 Servle t的 Filter 有相似之处比如二者都是 AOP 编程思想的体现都能实现权限检查、日志记录等。 不同的是1、使用范围不同Filter是Servlet规范规定的只能用于Web程序中。而拦截器既可以用于Web程序也可以用于Application、Swing程序中。 2、规范不同Filter是在Servlet规范中定义的是Servlet容器支持的。而拦截器是在Spring容器内的是Spring框架支持的。 3、使用的资源不同同其他的代码块一样拦截器也是一个Spring的组件归Spring管理配置在Spring文件中因此能使用Spring里的任何资源、对象例如Service对象、数据源、事务管理等通过IoC注入到拦截器即可而Filter则不能。 4、深度不同Filter 只在 Servlet 前后起作用。而拦截器能够深入到方法前后、异常抛出前后等因此拦截器的使用具有更大的弹性。所以在 Spring 构架的程序中要优先使用拦截器。 重点 实际上 Filter 和 Servlet 极其相似区别只是Filter不能直接对用户生成响应。实际上 Filter 里 doFilter() 方法里的代码就是从多个 Servlet 的 service() 方法里抽取的通用代码通过使用Filter可以实现更好的复用。 filter是一个可以复用的代码片段可以用来转换 HTTP 请求、响应和头信息。Filter 不像 Servlet它不能产生一个请求或者响 应它只是修改对某一资源的请求或者修改从某一的响应。 JSR 中说明的是按照多个匹配的Filter是按照其在 web.xml 中配置的顺序 来执行的。 所以这也就是把自己的 Filter 或者其他的 Filter比如UrlRewrite的Filter放在 springmvc 的 DispatcherFilter 的前面的原因。因为它们需要在请求被 springmvc 框架处理之前做一些前置的工作。 当 Filter 被调用并且进入了 SpringMVC 的 DispatcherFilter 中 后SpringMVC 会按照在 Action 中配置的 Interceptor Stack中的 Interceptor 的顺序来调用 Interceptor。 本文地址http://www.cnblogs.com/niceyoo/articles/8743116.html