很多時候我們都想要做一些與業務邏輯無關的事情,比如統計在線人數,篩選登陸賬號,統計頁面瀏覽量等等。。。這時候我們就需要用到今天講到的這些工具了。
-
首先我們先看一下攔截器
我們需要先自定義一個攔截器,寫上我們自己對邏輯的處理。@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:請求調用完成後回調方法,即在視圖渲染完成後回調"); } }
然後我們需要註冊這個攔截器
public class WebMvcConfigurer extends WebMvcConfigurationSupport { @Override public void addInterceptors(InterceptorRegistry registry) { //註冊攔截器 攔截規則 //多個攔截器時 以此添加 執行順序按添加順序 registry.addInterceptor(getHandlerInterceptor()).addPathPatterns("/*"); } @Bean public static HandlerInterceptor getHandlerInterceptor() { return new MyInterceptor(); } }
當然了需要在啓動類上添加註解@ServletComponentScan才能生效。這就是一個簡單的沒什麼邏輯的攔截器了,如果需要什麼特別的操作的話就直接在我們自定義的攔截器方法裏面寫就好了。
-
接下來我民額看一下過濾器,和上面的攔截器一樣,我們需要先自定義一個過濾器,實現我們自己想實現的方法。
@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 銷燬"); } }
然後我們調用我們寫的這個過濾器。
@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; } }
在攔截器哪裏我們已經在啓動類上添加了註解,所以這裏就不用重複添加了。
-
我們最後來看一下監聽器,這裏的監聽器不需要調用等操作,只需要寫好,添加註解就可以了。
/** * 監聽器 * 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