Spring Boot 過濾器、監聽器
阿新 • • 發佈:2019-02-02
上一篇文章已經對定義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 這兩個類。
最後上一張工程結構圖:
程式碼目前還沒有一個警告 ^_^