JavaWeb基礎(10):listener&filter
阿新 • • 發佈:2018-12-15
JavaWeb三大元件:Servlet 、Filter、 Listener
(一)listener
(1)監聽物件
- Listener(監聽器):一個介面
- 作用:監聽物件
- 比如:ServletContextListener、ServletRequestListener
- ServletContextListener
- 作用:伺服器啟動時呼叫函式,可在函式中載入配置檔案
public class MyServletContextListener implements ServletContextListener {
@Override
public void contextInitialized (ServletContextEvent sce){
System.out.println("ServletContext建立"); //伺服器啟動時呼叫
}
@Override
public void contextDestroyed(ServletContextEvent sce){
System.out.println("ServletContext銷燬"); //伺服器關閉時呼叫
}
}
- 同樣需要在web.xml中配置
<listener>
<listener-class>com.mio4.web.listener.MyServletContextListener< /listener-class>
</listener>
- ServletRequestListener:監聽單個Request的生命週期
- public void requestDestroyed(ServletRequestEvent sre)
- public void requestInitialized(ServletRequestEvent sre)
- HttpSesssionListener:監聽Session的生命週期
- public void sessionCreated(HttpSessionEvent hse)
- public void sessionDestroyed(HttpSessionEvent hse)
注意Listener也需要配置web.xml檔案
(2)監聽屬性
- ServletContextAttributeListener 監聽ServletContext的屬性變化
- public void attributeAdded(ServletContextAttributeEvent scae)
- public void attributeRemoved(ServletContextAttributeEvent scae)
- public void attributeReplaced(ServletContextAttributeEvent scae)
(3)監聽JavaBean
- JavaBean需要實現HttpSessionBindingListener介面
- public void valueBound(HttpSessionBindingEvent event) //檢測到JavaBean物件繫結在Sesion域中
- public void valueUnbound(HttpSessionBindingEvent event) //檢測解綁
- 檢測JavaBean的序列化和反序列化
(二)filter
- Filter(過濾器):一個介面
- 在HttpServletRequest到達Servlet之前攔截檢查
- 在HttpServletResponse到達客戶端之前攔截檢查
- 功能:過濾敏感詞彙、統一編碼、實現網站自動登入
- Filter也需要在web.xml中進行配置,其中url-pattern的地址對應Servlet的地址,表示在請求到達對應Servlet之前會先到過濾器
<filter>
<filter-name>HelloFilter</filter-name>
<filter-class>com.mio4.web.filter.HelloFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HelloFilter</filter-name>
<url-pattern>/helloFilter</url-pattern>
</filter-mapping>
(1)生命週期
- public void init(FilterConfig config) throws ServletException :伺服器啟動時呼叫
- public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException :執行業務邏輯
- public void destroy(): Filter被移除或伺服器關閉時呼叫
(2)FilterChain
chain.doFilter(request,response);
- 將請求放行到下一個過濾器
(3)url-pattern配置
- 匹配方式
- 完全匹配: 必須以"/"開始
- 目錄匹配:必須以"/“開始,”*"結束
- 字尾名匹配:比如".jsp"
- 在web.xml中的filter-mapping的先後會影響過濾器執行的先後順序
(4)應用
- 比如:保持網站的登入狀態