筆記-JavaWeb學習之旅15

Filter:過濾器

概念:當訪問服務器的資源是,過濾器能夠將請求攔截下來,完成一些特殊的功能html

快速入門:java

  1. 步驟:
    • 定義一個類,實現接口Filter
    • 複寫方法
    • 配置攔截路徑
package com.data.web.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter("/*")//訪問全部資源以前,都會執行該過濾器
public class FilterDemo1 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.println("Filter被執行了");//當訪問資源是,過濾器就會被執行
        //放行
        filterChain.doFilter(servletRequest,servletResponse);//放行以後才能夠訪問資源
    }

    @Override
    public void destroy() {

    }
}
過濾器的執行流程
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <%
    System.out.println("執行index.jsp.....");
  %>
  </body>
</html>
package com.data.web.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter("/*")
public class FilterDemo2 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.println("filterDemo2執行了....");
        filterChain.doFilter(servletRequest,servletResponse);
        //放行後能夠對響應的數據加強
        System.out.println("filterDemo2回來了....");
    }

    @Override
    public void destroy() {

    }
}
filterDemo2執行了....
執行index.jsp.....
filterDemo2回來了....
過濾器的生命週期

init方法:在服務器啓動後,會建立Filter對象,而後調用init方法。只執行一次,用於加載資源web

doFilter方法:每一次請求被攔截資源時,會執行,執行屢次瀏覽器

destroy:在服務器關閉後,Filter對象銷燬。若是服務器正常關閉,則會執行destroy方法,只執行一次,用於釋放資源服務器

過濾器配置詳解
  • 攔截路徑配置app

    具體資源路徑:/index.jsp 只有訪問index.jsp資源時,過濾器纔會執行異步

    攔截目錄:/user/* 訪問/user下的全部資源時,過濾器都會被執行jsp

    後綴名攔截: *.jsp 訪問全部後綴名爲jsp資源時,過濾器都會被執行ide

    攔截全部資源: /* 訪問全部資源時,過濾器都會被執行spa

  • 攔截方式配置:

    註解配置:過濾器會根據設置dispatcherTypes屬性的值來決定要不要執行

    REQUEST:默認值。瀏覽器直接請求資源

    FORWARD:只有是轉發訪問的資源,過濾器纔會執行

    INCLUDE:包含訪問資源

    ERROR:錯誤跳轉資源

    ASYNC:異步訪問資源

    web.xml配置:設置 標籤便可

img

過濾器鏈(配置多個過濾器)

執行順序:若是有兩個過濾器:過濾器1和過濾器2

1.過濾器1

2.過濾器2

3.資源執行

4.過濾器2

5.過濾器1

過濾器前後順序問題:

1.註解配置:按照類名的字符串比較規則比較,值小的先執行

2.web.xml配置: 誰定義在上邊,誰先執行

相關文章
相關標籤/搜索