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項目
如果需要編程資源,可以關注公衆號,當然是全免費的啦。
每天進步一點點,開心也多一點點