Java Filter過濾器+Listen監聽器
啥是過濾器
顧名思義即過濾掉一些東西,比如我們經歷的高考中考都是過濾器,他過濾掉一些在學習這一方面不是很好的人,而那些成績好的人則升入高中,大學。
但是java中的過濾器與生活中的過濾器的作用是相差無幾的,即按照制定的一些規則來控制一些對象
Filer的作用:
過濾器是出於客戶端與服務器端之間的一道過濾網,在訪問資源之前,通過一系列的過濾器對請求
進行修改,判斷等。把不符合規則的請求在中途攔截或修改,攔截或修改響應
如何創建使用一個Filter
1.定義一個類實現接口Filter(java.servlet)
import javax.servlet.*;
import java.io.IOException;
public class Filter1 implements javax.servlet.Filter{
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
}
@Override
public void destroy() {
}
}
Filer的生命周期:
1.init:在服務器啟動后,會創建Filter對象,然后調用init方法,只執行一次用於加載資源
2.doFilter:每一次請求被攔截都會執行
3.destory:在服務器關閉后,Filter對象會被銷毀,如何服務器對象正常關閉,destory方法會被執行一次
用於釋放資源
2.復寫方法
3.設置攔截路徑
設置攔截路徑有兩種方法,一種是注解配置,一種是設置web.xml
注解配置:
即加上一個@WebFilter("")
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter("/*")
public class Filter1 implements javax.servlet.Filter{
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
}
@Override
public void destroy() {
}
}
web.XML配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<filter>
<filter-name>demo1</filter-name>
<filter-class>Filter1</filter-class>
</filter>
<filter-mapping>
<filter-name>demo1</filter-name>
//設置攔截路徑
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
攔截路徑配置的講解
1.具體的資源路徑:/index.jsp 只有在訪問index.jsp這個資源的時候過濾器才會被執行
2.攔截目錄:/user/* 訪問/user下的所有資源的時候過濾器才會被執行
3.后綴名攔截:.jsp 訪問后綴名為jsp的資源的時候,過濾器才會被執行
4.攔截所有資源:/ 訪問所有資源,都會被攔截
攔截方式的配置:
注解配置:
- 設置dispatcherTypes屬性
1. REQUEST:默認值。瀏覽器直接請求資源
2. FORWARD:轉發訪問資源
3. INCLUDE:包含訪問資源
4. ERROR:錯誤跳轉資源
5. ASYNC:異步訪問資源
web.xml配置
* 設置標簽即可
過濾器的執行流程:
1.執行過濾器
2.執行放行后的資源
3.執行過濾器放行器代碼下邊的代碼
過濾器鏈(配置多個過濾器)
執行順序
如果有兩個過濾器:過濾器1和過濾器2
1. 過濾器1
2. 過濾器2
3. 資源執行
4. 過濾器2
5. 過濾器1
看圖按照從左到右的順序來看就好理解了
那么有了多個過濾器之后又是怎么來判斷那個過濾器先哪個過濾器后的呢?
是隨機判斷的?
當然不是啦
過濾器先后執行順序的判斷方法
1. 注解配置:
按照類名的字符串比較規則比較,值小的先執行
- 如: AFilter 和 BFilter,AFilter就先執行了。
2. web.xml配置:
誰定義在上邊,誰先執行