過濾器和攔截器的區別

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後參數

相關文章
相關標籤/搜索