Springboot入坑(二):Springboot中Filter、Listener的用法

Springboot入坑(二):Springboot中Filter、Listener的用法

上一篇文章中咱們講到了快速搭建Springboot項目以及整合Mybatis,可是在實際的開發中咱們還須要用到不少的東西。後面的文章中咱們會陸續的加入各個知識點,慢慢的豐滿咱們的demo。html

Filter的用法java

 

咱們先來了解下Filterweb

Filter也稱之爲過濾器,它是Servlet技術中最實用的技術,Web開發人員經過Filter技術,對web服務器管理的全部web資源:例如Jsp, Servlet, 靜態圖片文件或靜態 html 文件等進行攔截,從而實現一些特殊的功能。例如實現URL級別的權限訪問控制、過濾敏感詞彙、壓縮響應信息等一些高級功能。spring

它主要用於對用戶請求進行預處理,也能夠對HttpServletResponse進行後處理。使用Filter的完整流程:Filter對用戶請求進行預處理,接着將請求交給Servlet進行處理並生成響應,最後Filter再對服務器響應進行後處理。springboot

 

import org.springframework.core.annotation.Order;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
/**
 * 使用@WebFilter註解標註過濾器
 * 屬性filterName聲明過濾器的名稱,可選
 * 屬性urlPatterns指定要過濾 的URL模式,也可以使用屬性value來聲明.(指定要過濾的URL模式是必選屬性)
 * @Order(1)控制加載順序  * @author 劉鋮
 * @since 2018/4/9
 */
@Order(1)
//重點
@WebFilter(filterName = "myfilter", urlPatterns = "/*")
public class IndexFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {}
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.print("================須要過濾器作什麼?==================");
        if("2".equals(servletRequest.getParameter("id"))){
            servletResponse.getWriter().write("Cannot query the data!");
        }else{
            filterChain.doFilter(servletRequest,servletResponse);
        }
    }
    @Override
    public void destroy() {}
}

過濾器寫好了該如何使用呢?還須要配置web.xml嗎?服務器

在springboot中使用過濾器不需咱們在去配置web.xml了,那如何讓程序掃描到它呢以下session

 

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
/**
 * 使用 @ServletComponentScan註解後,ServletFilterListener
 * 能夠直接經過 @WebServlet@WebFilter@WebListener 註解自動註冊,無需其餘代碼。
 * @author 劉鋮
 * @since 2018-04-09
 **/
@SpringBootApplication
//重點
@ServletComponentScan
public class ABountyNetApplication1 {
    public static void main(String[] args) {
        SpringApplication.run(ABountyNetApplication1.class, args);
    }
}

這樣咱們就完成了一個簡單攔截器。ide

重點就是兩個註解 @ServletComponentScan @WebFilter順帶也能夠去了解一下@order網站

Listener的用法url

監聽器用於監聽web應用中某些對象、信息的建立、銷燬、增長,修改,刪除等動做的發生,而後做出相應的響應處理。當範圍對象的狀態發生變化的時候,服務器自動調用監聽器對象中的方法。經常使用於統計在線人數和在線用戶,系統加載時進行信息初始化,統計網站的訪問量等等。

按監聽的對象劃分,能夠分爲
ServletContext對象監聽器
HttpSession對象監聽器
ServletRequest對象監聽器
按監聽的事件劃分
對象自身的建立和銷燬的監聽器
對象中屬性的建立和消除的監聽器

session中的某個對象的狀態變化的監聽器

由於分類比較多咱們只實現一種

 

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

/**
 * 使用@WebListener註解,實現ServletContextListener接口
 * @author 劉鋮
 * @since 2018/4/9
 */

@WebListener
public class IndexListener implements ServletContextListener{
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        System.out.println("ServletContex初始化");
        System.out.println(servletContextEvent.getServletContext().getServerInfo());
    }

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

如何使用呢和過濾器同樣,也不須要在去配置web.xml

重點 @WebListener

相關文章
相關標籤/搜索