1. 程式人生 > >Spring Boot 過濾器、監聽器

Spring Boot 過濾器、監聽器

上一篇文章已經對定義Servlet 的方法進行了說明,過濾器(Filter)和 監聽器(Listener)的註冊方法和 Servlet 一樣,不清楚的可以檢視下上一篇文章:http://blog.csdn.net/catoop/article/details/50501686 本文將直接使用@WebFilter和@WebListener的方式,完成一個Filter 和一個 Listener。

過濾器(Filter)檔案

MyFilter.java

package org.springboot.sample.filter;

import java.io.IOException;

import javax.servlet.Filter;
import
javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; /** * 使用註解標註過濾器 * @WebFilter將一個實現了javax.servlet.Filter介面的類定義為過濾器 * 屬性filterName宣告過濾器的名稱,可選 * 屬性urlPatterns指定要過濾 的URL模式,也可使用屬性value來宣告.(指定要過濾的URL模式是必選屬性) * * @author
單紅宇(365384722) * @myblog http://blog.csdn.net/catoop/ * @create 2016年1月6日 */
@WebFilter(filterName="myFilter",urlPatterns="/*") public class MyFilter implements Filter { @Override public void destroy() { System.out.println("過濾器銷燬"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws
IOException, ServletException { System.out.println("執行過濾操作"); chain.doFilter(request, response); } @Override public void init(FilterConfig config) throws ServletException { System.out.println("過濾器初始化"); } }

ServletContext監聽器(Listener)檔案

MyServletContextListener.java

package org.springboot.sample.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

/**
 * 使用@WebListener註解,實現ServletContextListener介面
 *
 * @author   單紅宇(365384722)
 * @myblog  http://blog.csdn.net/catoop/
 * @create    2016年1月6日
 */
@WebListener
public class MyServletContextListener implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("ServletContex初始化");
        System.out.println(sce.getServletContext().getServerInfo());
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("ServletContex銷燬");
    }

}

ServletContext監聽器(Listener)檔案

MyHttpSessionListener.java

package org.springboot.sample.listener;

import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

/**
 * 監聽Session的建立與銷燬
 *
 * @author   單紅宇(365384722)
 * @myblog  http://blog.csdn.net/catoop/
 * @create    2016年1月6日
 */
@WebListener
public class MyHttpSessionListener implements HttpSessionListener {

    @Override
    public void sessionCreated(HttpSessionEvent se) {
        System.out.println("Session 被建立");
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        System.out.println("ServletContex初始化");
    }

}

注意不要忘記在 SpringBootSampleApplication.java 上新增 @ServletComponentScan 註解。

在啟動的過程中我們會看到輸出:

ServletContex初始化
Apache Tomcat/8.0.30
過濾器初始化

服務啟動後,隨便訪問一個頁面,會看到輸出:

執行過濾操作
Session 被建立

至於如何使用程式碼的方式註冊Filter和Listener,請參考上一篇文章關鍵Servlet的介紹。不同的是需要使用 FilterRegistrationBean 和 ServletListenerRegistrationBean 這兩個類。

最後上一張工程結構圖:
這裡寫圖片描述

程式碼目前還沒有一個警告 ^_^