免费A级毛片无码专区网站-成人国产精品视频一区二区-啊 日出水了 用力乖乖在线-国产黑色丝袜在线观看下-天天操美女夜夜操美女-日韩网站在线观看中文字幕-AV高清hd片XXX国产-亚洲av中文字字幕乱码综合-搬开女人下面使劲插视频

Filter Spring中過濾器和攔截器(Interceptor)的區(qū)別和聯(lián)系

在我們?nèi)粘5拈_發(fā)中,我們經(jīng)常會(huì)用到Filter和Interceptor 。有時(shí)同一個(gè)功能 。Filter可以做,Interceptor也可以做 。有時(shí)就需要考慮使用哪一個(gè)比較好 。這篇文章主要介紹一下,二者的區(qū)別和聯(lián)系 。希望給大家進(jìn)行選擇的時(shí)候,提供一些幫助
Filter 和 Interceptor 的區(qū)別Filter過濾器(Filter)是在請(qǐng)求進(jìn)入Tomcat容器之后,請(qǐng)求進(jìn)入Servlet之前執(zhí)行 。Filter是Servlet規(guī)范規(guī)定的,只能用于web程序中 。
Interceptor攔截器(Interceptor)是在Servlet和Controller控制器之間執(zhí)行 。Interceptor是SpringframeWork中規(guī)定的 。
Filter Spring中過濾器和攔截器(Interceptor)的區(qū)別和聯(lián)系

文章插圖
  • Interceptor是基于java的反射機(jī)制的,而Filter是基于函數(shù)回調(diào) 。
  • Interceptor不依賴與servlet容器,F(xiàn)ilter依賴與servlet容器 。
  • Interceptor只能對(duì)action請(qǐng)求起作用,而Filter則可以對(duì)幾乎所有的請(qǐng)求起作用 。
  • Interceptor可以訪問action上下文、值棧里的對(duì)象,而Filter不能訪問 。
  • Interceptor以獲取IOC容器中的各個(gè)bean,而過濾器就不行,這點(diǎn)很重要,在攔截器里注入一個(gè)service,可以調(diào)用業(yè)務(wù)邏輯 。攔截器可以獲取ioc中的service bean實(shí)現(xiàn)業(yè)務(wù)邏輯 。
Spring MVC中每個(gè)控制器中可以定義多個(gè)請(qǐng)求處理方法,我們把這種請(qǐng)求處理方法簡(jiǎn)稱為ActionFilter的實(shí)現(xiàn)自己的filter需要要實(shí)現(xiàn)javax.servlet.Filter.
import javax.servlet.*;import java.io.IOException;public class Myfilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("Myfilter init");}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("Myfilter doFilter before");filterChain.doFilter(servletRequest,servletResponse);System.out.println("Myfilter doFilter after");}@Overridepublic void destroy() {System.out.println("Myfilter destroy");}}注冊(cè)Filter在web.xml中
<!-- 注冊(cè)過濾器 --><filter><filter-name>myfilter</filter-name><filter-class>com.hardy.config.Myfilter</filter-class></filter><filter-mapping><filter-name>myfilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>Interceptor的實(shí)現(xiàn)自己的Interceptor需要要實(shí)現(xiàn)org.springframework.web.servlet.HandlerInterceptor.
import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class MyInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 在攔截點(diǎn)(Controller方法處理之前)執(zhí)行攔截 若返回的是false則中斷執(zhí)行 反之亦然System.out.println("MyInterceptor preHandle");return HandlerInterceptor.super.preHandle(request, response, handler);}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {// 在處理過程中(Controller方法處理完之后DispatcherServlet進(jìn)行視圖的渲染之前)執(zhí)行攔截System.out.println("MyInterceptor postHandle");HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {// 在DispatcherServlet進(jìn)行視圖的渲染后 返回前進(jìn)行攔截System.out.println("MyInterceptor afterCompletion");HandlerInterceptor.super.afterCompletion(request, response, handler, ex);}}注冊(cè)Interceptor在spring的配置文件中(application.xml)

經(jīng)驗(yàn)總結(jié)擴(kuò)展閱讀