不少時候咱們都想要作一些與業務邏輯無關的事情,好比統計在線人數,篩選登錄帳號,統計頁面瀏覽量等等。。。這時候咱們就須要用到今天講到的這些工具了。
首先咱們先看一下攔截器
咱們須要先自定義一個攔截器,寫上咱們本身對邏輯的處理。git
@Slf4j public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { log.info("preHandle:請求前調用"); //返回 false 則請求中斷 return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { log.info("postHandle:請求後調用"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { log.info("afterCompletion:請求調用完成後回調方法,即在視圖渲染完成後回調"); } }
而後咱們須要註冊這個攔截器github
public class WebMvcConfigurer extends WebMvcConfigurationSupport { @Override public void addInterceptors(InterceptorRegistry registry) { //註冊攔截器 攔截規則 //多個攔截器時 以此添加 執行順序按添加順序 registry.addInterceptor(getHandlerInterceptor()).addPathPatterns("/*"); } @Bean public static HandlerInterceptor getHandlerInterceptor() { return new MyInterceptor(); } }
固然了須要在啓動類上添加註解@ServletComponentScan才能生效。這就是一個簡單的沒什麼邏輯的攔截器了,若是須要什麼特別的操做的話就直接在咱們自定義的攔截器方法裏面寫就行了。web
接下來我民額看一下過濾器,和上面的攔截器同樣,咱們須要先自定義一個過濾器,實現咱們本身想實現的方法。session
@Slf4j public class MyFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { log.info("filter 初始化"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // TODO Auto-generated method stub log.info("doFilter 請求處理"); //對request、response進行一些預處理 // 好比設置請求編碼 // request.setCharacterEncoding("UTF-8"); // response.setCharacterEncoding("UTF-8"); //TODO 進行業務邏輯 //鏈路 直接傳給下一個過濾器 chain.doFilter(request, response); } @Override public void destroy() { log.info("filter 銷燬"); } }
而後咱們調用咱們寫的這個過濾器。ide
@Configuration public class FilterConfig { @Bean public FilterRegistrationBean ResistFilter() { FilterRegistrationBean registration = new FilterRegistrationBean(); //當過濾器有注入其餘bean類時,可直接經過@bean的方式進行實體類過濾器,這樣不可自動注入過濾器使用的其餘bean類。 //固然,若無其餘bean須要獲取時,可直接new MyFilter(),也可以使用getBean的方式。 registration.setFilter(new MyFilter()); //過濾器名稱 registration.setName("customFilter"); //攔截路徑 registration.addUrlPatterns("/hello"); //設置順序 registration.setOrder(10); return registration; } }
在攔截器哪裏咱們已經在啓動類上添加了註解,因此這裏就不用重複添加了。工具
咱們最後來看一下監聽器,這裏的監聽器不須要調用等操做,只須要寫好,添加註解就能夠了。post
/** * 監聽器 * servletRequestListener通常來實現web瀏覽量
*/ @WebListener @Slf4j public class ServletLister implements ServletRequestListener { @Override public void requestDestroyed(ServletRequestEvent sre) { log.info("監聽器:銷燬"); } @Override public void requestInitialized(ServletRequestEvent sre) { log.info("監聽器:初始化"); } } ``` ``` /** * 監聽器 * httpSessionListener來實現在線人數的統計 * @author zhouzhaodong */ @WebListener @Slf4j public class HttpLister implements HttpSessionListener { @Override public void sessionCreated(HttpSessionEvent se) { log.info("又有人上線了,統計一下在線人數吧!"); } @Override public void sessionDestroyed(HttpSessionEvent se) { log.info("又有人下線了,統計一下在線人數吧!"); } } ``` 監聽器主要是用來統計數量的。 就是先簡單的記錄一下攔截器,過濾器和監聽器的簡單使用方法,後期若是有詳細的使用方法,再來更新本文。 代碼下載地址:https://github.com/zhouzhaodong/Study