过滤器和拦截器的区别

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

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

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

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

  ④  深度不一样,Filter只在Servlet先后起做用,而拦截器可以深刻到方法先后,异常抛出先后,spring架构程序,优先使用拦截器编程

详细的区别:架构

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

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

  ③ 拦截器只能对action请求起做用,过滤器对全部请求起做用函数

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

  ⑤  在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后参数

相关文章
相关标签/搜索