1. 程式人生 > >JavaWeb基礎(10):listener&filter

JavaWeb基礎(10):listener&filter

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)應用

  • 比如:保持網站的登入狀態