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