Listener & Filter
1.1 Listener:監聽器:
1.1.1 Listener的概述:
什麼是監聽器:
* 監聽器就是一個Java類用來監聽其他的JavaBean的變化.
監聽器和過濾器屬於Servlet中的高階技術.
監聽器的應用:
* 主要在Swing程式設計.
* 在Android大量應用.
* 監聽器的術語:
* 事件源:被監聽的物件.汽車
* 監聽器物件:監聽的物件.汽車上報警器
* 事件源與監聽器繫結:
* 事件:指的是事件源的改變.
* 獲得事件源物件.
1.1.2 Servlet的監聽器:
Servlet的監聽器:
* 監聽ServletContext,HttpSession,ServletRequest
* 事件源和監聽器繫結的過程:通過配置完成.
Servlet中的監聽器:提供了8個監聽器.
一類:監聽三個域物件的建立和銷燬的監聽器.3個
二類:監聽三個域物件的屬性變更的監聽器.(屬性新增,屬性移除,屬性替換)3個.
三類:監聽HttpSession物件中的JavaBean的狀態的改變.(繫結,解除繫結,鈍化和活化)2個
1.1.3 一類監聽器:監聽三個域物件的建立和銷燬的監聽器:
1.1.3.1 ServletContextListener:監聽ServletContext物件的建立和銷燬.
【方法】
【問題】
* ServletContext物件何時建立和銷燬:
* 建立:伺服器啟動時候,伺服器可以為每個WEB應用建立一個單獨的ServletContext.
* 銷燬:伺服器關閉的時候,或者專案從伺服器中移除.
【入門案例】
1.編寫一個類實現監聽器的介面.
public class MyServletContextListener implements ServletContextListener{
@Override
/**
* 監聽ServletContext物件的建立的方法:
* @param sce
*/
public void contextInitialized(ServletContextEvent sce) {
System.out.println("ServletContext物件被建立了...");
}
@Override
/**
* 監聽ServletContext物件的銷燬的方法:
* @param sce
*/
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("ServletContext物件被銷燬了...");
}
}
2.通過配置完成監聽器和事件源的繫結.
<!-- 配置監聽器 -->
<listener>
<listener-class>com.itheima.weblistener.MyServletContextListener</listener-class>
</listener>
【企業中應用】
* 初始化工作.
* 載入配置檔案:Spring框架.
* ContextLoaderListener:
* 定時任務排程:
* Timer,TimerTask.
1.1.1.1 HttpSessionListener:監聽HttpSession物件的建立和銷燬的監聽器.
【方法】
sessionCreated(HttpSessionEvent se)
sessionDestroyed(HttpSessionEvent se)
【問題】
* HttpSession物件何時建立和銷燬的?
* 建立:伺服器第一次呼叫getSession()方法的時候.
* 銷燬:
* 非正常關閉伺服器(正常關閉序列化到硬碟)
* session過期了(預設30分鐘)
* session.invalidate()
【入門】
1.編寫監聽器:
public class MyHttpSessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("HttpSession物件被建立了...");
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("HttpSession物件被銷燬了...");
}
}
2.配置監聽器:
<listener>
<listener-class>com.itheima.weblistener.MyHttpSessionListener</listener-class>
</listener>
【問題】
1.訪問html是否建立session物件?:不會
2.訪問一個Servlet是否建立session物件?:不會
3.訪問一個jsp是否建立session物件?:會
1.1.1.1 ServletRequestListener:監聽ServletRequest物件的建立和銷燬的監聽器:
【方法】
【問題】
ServletRequest物件何時建立和銷燬?
* 建立:客戶端向伺服器傳送請求的時候.
* 銷燬:伺服器為這次請求作出了響應時候.
【入門】
1.編寫一個監聽器
public class MyServletRequestListener implements ServletRequestListener {
public void requestInitialized(ServletRequestEvent sre) {
System.out.println("ServletRequest被建立了...");
}
public void requestDestroyed(ServletRequestEvent sre) {
System.out.println("ServletRequest被銷燬了...");
}
}
2.配置監聽器
<listener>
<listener-class>com.itheima.weblistener.MyServletRequestListener</listener-class>
</listener>
【問題】
1.訪問html是否建立request物件?:會
2.訪問一個Servlet是否建立request物件?:會
3.訪問一個jsp是否建立request物件?:會
利用Cookie記住使用者名稱和密碼.
【Filter的概述】
Ø 什麼是過濾器Filter:
Filter:一個實現了特殊介面的Java類.實現對請求資源的過濾的功能.
* 過濾器是Servlet技術中最為實用的技術.
Ø 過濾器的作用:
對目標資源進行過濾.
* 自動登入,解決網站亂碼,進行頁面靜態化,進行響應壓縮...
Ø 使用過濾器:
1.編寫一個類實現過濾器的介面.
public class FilterDemo1 implements Filter{
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("FilterDemo1執行了...");
// 放行
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
2.對過濾器進行配置.
<filter>
<filter-name>FilterDemo1</filter-name>
<filter-class>com.filter.FilterDemo1</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterDemo1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
【過濾器的生命週期】(瞭解)
* Servlet的生命週期(*****)
* Filter生命週期:過濾器從建立到銷燬的過程.
* 伺服器啟動的時候,伺服器就會建立過濾器的物件,每次訪問被攔截目標資源,過濾器中的doFilter的方法就會執行.當伺服器關閉的時候,伺服器就會銷燬Filter物件.
【FilterConfig的作用】
【方法】
// 獲得初始化引數:過濾器的初始化引數.
String username = fConfig.getInitParameter("username");
String password = fConfig.getInitParameter("password");
System.out.println("初始化引數"+username+" "+password);
// 獲得所有的初始化引數的名稱:
Enumeration<String> names = fConfig.getInitParameterNames();
while(names.hasMoreElements()){
String name = names.nextElement();
String value = fConfig.getInitParameter(name);
System.out.println(name+" "+value);
}
// 獲得過濾器的配置的名稱:
String filterName = fConfig.getFilterName();
System.out.println("過濾器名稱"+filterName);
【FilterChain:過濾器鏈】
過濾器鏈中的過濾器的執行的順序跟<filter-mapping>的配置順序有關.
【方法】
【Filter的配置】
【url-pattern的配置】與servlet中的配置一樣:
* 三種配置:
* 完全路徑匹配:以 /開始 /aaa /aaa/bbb
* 目錄匹配: 以/ 開始 /* /aaa/*
* 副檔名匹配: 不能以 /開始 *.do *.jsp *.action
【servlet-name的配置】通過url-pattern攔截一個Servlet的資源.也可以通過servlet-name標籤進行攔截.
【dispatcher的配置】
* REQUEST:預設值.
* FORWARD:攔截轉發
* ERROR:攔截跳轉到錯誤頁面.全域性錯誤頁面.
* INCLUDE:攔截在一個頁面中包含另一個頁面.
相關文章
- Filter&ListenerFilter
- Cookie,Session Filter,Listener詳解CookieSessionFilter
- SpringBoot如何註冊Servlet、Filter、ListenerSpring BootServletFilter
- JavaWeb三大元件(Servlet、Filter、Listener)JavaWeb元件ServletFilter
- Tomcat深入淺出——Filter與Listener(五)TomcatFilter
- 一文快速回顧 Servlet、Filter、ListenerServletFilter
- 2024/11/20日 日誌 關於 Filter & ListenerFilter
- 【024期】JavaWeb面試題(五):Filter和ListenerJavaWeb面試題Filter
- Filter(過濾器)與Listener(監聽器)詳解Filter過濾器
- 實戰Spring Boot 2.0系列(五) - Listener, Servlet, Filter和InterceptorSpring BootServletFilter
- Listener
- Listener refused the connection with the following error:ORA-12514, TNS:listenerError
- JavaWeb-ListenerJavaWeb
- fitter&listener
- 4.5.1.3 srvctl add listener
- 7、listener監聽
- listener_scan1.log、listener.log監聽日誌清理
- Presto Event Listener開發REST
- Sanic listener() 方法/函式函式
- ORACLE之手動註冊監聽listener。alter system set local_listener="XXX"Oracle
- JavaScript filter()JavaScriptFilter
- Logcat filterGCFilter
- gateway filterGatewayFilter
- Filter管道Filter
- Oracle OCP(43):listener.oraOracle
- Oracle listener log配置與管理Oracle
- ORA-00130: invalid listener address
- oracle-listener 4GOracle
- 深入理解Flutter的Listener元件Flutter元件
- 關於RAC的remote_listenerREM
- TNS問題排查 The listener supports no services
- Oracle listener log 日誌分析方法Oracle
- day25-Listener監聽器
- fuzzing XSS filterFilter
- filter過濾Filter
- wireshark-filterFilter
- AngularJS之FilterAngularJSFilter
- Laravel model filterLaravelFilter
- GEE filter by bandsFilter