过滤器和拦截器的区别

Spring 的拦截器与Servlet的过滤器有相似之处,二者都是AOP编程思想的体现,都可以实现权限的检查,日志记录等

  ① 使用范围不同:  Filter是Servlet规范规定,只能用在web程序中,而拦截器,除了web程序,也可以用于Application,Swing程序中

  ②  规范不同  Filter是Servlet规范中定义的  是Servlet容器支持的,而拦截器是在spring容器内,是Spring框架支持的

  ③  使用资源不同  同其他代码块一样,拦截器也是sprring的组件,归spring管理,配置spring文件中,因此能使用Spring中任何资源,对象,例如对象,数据源,事务管理,通过IOC注入到拦截器即可:Filter则不能

  ④  深度不同,Filter只在Servlet前后起作用,而拦截器能够深入到方法前后,异常抛出前后,spring架构程序,优先使用拦截器

详细的区别:

  ①:  拦截器是基于java的反射机制,而过滤器是基于函数回调

  ②: 拦截器不依赖servlet容器,过滤器依赖servlet容器

  ③ 拦截器只能对action请求起作用,过滤器对所有请求起作用

  ④  拦截器可以访问action上下文,值栈里的对象,而过滤器不能

  ⑤  在action的生命周期中,拦截器可以多次调用,而过滤器只能在容器的初始化时被调用一次

  ⑥拦截器可以获取IOC容器各个bean,而过滤器不能,

  过滤器

@Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("before...");
        chain.doFilter(request, response);
        System.out.println("after...");
    }

拦截器

 @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion");
    }

 

 

SpringMVC的机制是由同一个Servlet来分发请求给不同Controller,其实这一步实在Servlet的service()方法中执行

 

原文链接  https://www.cnblogs.com/panxuejun/p/7715917.html

java中getAttribute和getParameter的区别

  getAttribute表示从request范围获取属性值,必须先set设置属性,才能获取到值

getParameter表示接受参数,参数为页面提交的数据,包括表单中数据,或者url后参数

 

posted on 2018-05-23 18:21  期待华丽转身  阅读(431)  评论(0编辑  收藏  举报