【SpringBoot必知必會 Filter和Listener】

Filter

1.Filter的簡單介紹

Filter也稱爲過濾器,是處於客戶端與服務器之間的一道過濾網。我們所熟知的資源文件,例如圖片,HTML等,都能被其攔截。當然,它除了這個之外,還能實現URL級別的權限訪問控制、過濾敏感詞彙、壓縮響應信息等一些高級功能。

2.過濾器Filter的使用

首先,我們先在項目中創建filter包,之後在包裏面創建我們的過濾器類。當然,在後續引入類的過程中系統可能提示了很多個import,我們需要選擇的是javax.servlet。具體的代碼如下:

@WebFilter(filterName = "userFilter",urlPatterns = "/*")
public class UserFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("---------init()初始化");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("doFilter()過濾");
        chain.doFilter(request,response);
    }

    @Override
    public void destroy() {
        System.out.println("---------destroy()銷燬");
    }
}
  • @WebFilter:用於將一個類聲明爲過濾器,該註解將會在應用部署時被容器處理,容器根據具體的屬性配置將相應的類部署爲過濾器。在傳統的SSM中,我們需要在web.xml中配置filterName urlPatterns value等。我們利用註解的話就不需要了,極大地節省了時間。
    我們編寫好filter類之後是不能直接運行的,運行之後是看不到效果的。
    這是爲什麼呢?
    因爲我們還少了一步重要的操作,要在入口類中添加@ServletComponentScan纔是真正的大功告成。
    具體如下圖所示(@EnableScheduling是我做定時任務的註解,讀者可不理會):
    在這裏插入圖片描述
  • @ServletComponentScan:使用該註解後,Servlet、Filter、Listener可以直接通過相應的註解自動註冊。(當然還有代碼註冊,但是我們先掌握一種)

3.Filter的測試

項目一啓動便會調用初始化方法,在實際運用場景中可以進行數據的初始化。
在這裏插入圖片描述
調用前先執行doFilter方法
在這裏插入圖片描述
小結:在運行過程中,Filter會首先調用init方法,然後系統訪問資源時會先調用doFilter。最後,應用關閉時會調用destory。

Listener

1.Listener的簡單介紹

監聽器也叫Listener,是Servlet的監聽器,可以用於監聽Web應用中某些對象、信息的創建、銷燬、增加、修改、刪除等動作的發生,然後做出相應的響應處理。服務對象狀態變化時,服務器自動調用監聽器對象中的方法,常用於統計在線人數和在線用戶等。
監聽器分3類:
ServletContext(對應application),HttpSession(對應session)、ServletRequest(對應request)。Application在整個Web服務中只有一個,在Web務關閉時銷燬。Session 對應每個會話,在會話起始時創建,一端關閉會話時銷燬。Request 對象是客戶發送請求時創建的(一同創建的還有
Response),用於封裝請求數據,在一次請求處理完畢時銷燬。
根據監聽的事件,可把監聽器分爲以下3類:
(1)監聽對象創建與銷燬,如 ServletContextListener。
(2)監聽對象域中屬性的增加和刪除,如 HttpSessionListener和ServletRequestListener。
(3)監聽綁定到 Session上的某個對象的狀態,如 ServletContextAttributeListener、
HttpSessionAttributeListener、 ServletRequestAttributeListen等。

2.監聽器Listener的使用

首先,我們先在項目中創建listener包,之後在包裏面創建我們的過監聽器類。具體的代碼如下:

@WebListener
public class UserListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("---------Listener初始化");
    }
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("---------Listener銷燬");
    }
}
  • @WebListener:用於將一個類聲明爲監聽器,該註解將會在應用部署時被容器處理,容器根據具體的屬性配置將相應的類部署爲監聽器。
  • ServletContextListener類:能夠監聽ServletContext對象的生命週期,實際上就是監聽Web應用的生命週期。

3.Listener的測試

在應用啓動時調用contextInitialized,在應用銷燬時調用contextDestroyed。
在這裏插入圖片描述
推薦閱讀:
(1)我的第一個SpringBoot項目

(2)springBoot必知必會 yml文件配置

(3)SpingBoot必知必會 Redis緩存

如果需要編程資源,可以關注公衆號,當然是全免費的啦。
在這裏插入圖片描述

每天進步一點點,開心也多一點點

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章