欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java過濾器@WebFilter用法詳解

 更新時間:2024年01月28日 11:06:23   作者:Mr_superman_liu  
@WebFilter用于將一個類聲明為過濾器,該注解將會在部署時被容器處理,容器將根據(jù)具體的屬性配置將相應(yīng)的類部署為過濾器,這篇文章主要給大家介紹了關(guān)于Java過濾器@WebFilter用法的相關(guān)資料,需要的朋友可以參考下

簡單介紹

@WebFilter注解是JavaEE中的一種注解,用于標(biāo)識一個類為過濾器(Filter)。過濾器用于對請求進行過濾和處理,可以在請求到達目標(biāo)資源之前或之后執(zhí)行一些操作。

使用**@WebFilter**注解可以將一個類聲明為過濾器,并指定過濾器的名稱、URL模式、Servlet名稱等。

優(yōu)勢

  • 簡化配置:不再需要在web.xml文件中手動配置過濾器,而是通過注解直接配置在過濾器類上。
  • 可讀性高:注解方式可以將過濾器的相關(guān)信息直接寫在過濾器類上,使得代碼更加簡潔和可讀。
  • 方便管理:通過注解方式,可以更方便地管理和組織過濾器,減少了配置文件的復(fù)雜性。

方法

@WebFilter注解提供了以下屬性來配置過濾器:

  • filterName:指定過濾器的名稱,可選屬性。
  • urlPatterns:指定過濾器攔截的URL模式,可以是一個字符串?dāng)?shù)組,表示多個URL模式。
  • value:urlPatterns的別名屬性,可以用來指定過濾器攔截的URL模式。
  • servletNames:指定過濾器攔截的Servlet名稱,可以是一個字符串?dāng)?shù)組,表示多個Servlet名稱。
  • dispatcherTypes:指定過濾器的調(diào)度類型,可以是DispatcherType枚舉類型的數(shù)組,默認為REQUEST。
  • asyncSupported:指定過濾器是否支持異步請求,默認為false。
  • initParams:指定過濾器的初始化參數(shù),以@WebInitParam注解的數(shù)組形式提供。

過濾器原理

當(dāng)我們使用過濾器時,過濾器會對游覽器的請求進行過濾,過濾器可以動態(tài)的分為3個部分,1.放行之前的代碼,2.放行,3.放行后的代碼,這3個部分分別會發(fā)揮不同作用

  • 第一部分代碼會對游覽器請求進行第一次過濾,然后繼續(xù)執(zhí)行
  • 第二部分代碼就是將游覽器請求放行,如果還有過濾器,那么就繼續(xù)交給下一個過濾器
  • 第三部分代碼就是對返回的Web資源再次進行過濾處理

創(chuàng)建過濾器

創(chuàng)建MyFilter,只需要實現(xiàn)Filter接口就行,并且加一個WebFIlter注解

代碼演示

Filter的三個階段就對應(yīng)著Filter的3個方法,init方法會在Filter創(chuàng)建時調(diào)用,doFilter方法會在請求和攔截匹配時調(diào)用,destroy方法會在Filter銷毀時調(diào)用。

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
import java.io.IOException;

@WebFilter(initParams = {@WebInitParam(name = "aaa", value = "sss")})
public class MyFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("調(diào)用01過濾器");
        String aaa = filterConfig.getInitParameter("aaa");
        System.out.println(aaa);
    }


    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("對01 request 進行過濾");
        filterChain.doFilter(servletRequest, servletResponse);
        System.out.println("對01 response 過濾");
    }

    @Override
    public void destroy() {
        System.out.println("01 調(diào)用了destroy方法");
    }
}

啟動服務(wù)器控制臺輸出

進行攔截時控制臺輸出

關(guān)閉服務(wù)器控制臺輸出 **

到此,我們就成功驗證了Filter的生命周期。 filterConfig.getInitParameter()是獲取我們注解配置得參數(shù)值value。根據(jù)上面圖解,大家可能會有個疑問為什么會有02**這個過濾器。那我們接下來就講一下。

多個過濾器

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

@WebFilter("/*")
public class MyFilter2 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("調(diào)用02過濾器");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("對02 request 進行過濾");
        filterChain.doFilter(servletRequest, servletResponse);
        System.out.println("對02 response 過濾");
    }

    @Override
    public void destroy() {
        System.out.println("02 調(diào)用了destroy方法");
    }
}

我們可以看見Filter01先進行過濾,然后交給Filter02,然后訪問資源,然后Filter02對響應(yīng)進行過濾,然后Filter01對響應(yīng)進行過濾。

多個Filter的執(zhí)行順序

如果我們是使用@WebFilter進行配置的,那么執(zhí)行順序就是字符比較順序來執(zhí)行,例如有2個過濾器,一個是AFilter,一個是BFilter,那么AFilter就會先執(zhí)行。

總結(jié)

到此這篇關(guān)于Java過濾器@WebFilter用法詳解的文章就介紹到這了,更多相關(guān)Java過濾器@WebFilter內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring boot2X Consul如何使用Feign實現(xiàn)服務(wù)調(diào)用

    Spring boot2X Consul如何使用Feign實現(xiàn)服務(wù)調(diào)用

    這篇文章主要介紹了spring boot2X Consul如何使用Feign實現(xiàn)服務(wù)調(diào)用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • springboot中@Async默認線程池導(dǎo)致OOM問題

    springboot中@Async默認線程池導(dǎo)致OOM問題

    這篇文章主要介紹了springboot中@Async默認線程池導(dǎo)致OOM問題,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • java必懂的冷知識點之Base64加密與解密

    java必懂的冷知識點之Base64加密與解密

    這篇文章主要介紹了java必懂的冷知識點之Base64加密與解密的相關(guān)資料,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • spring?retry實現(xiàn)方法請求重試的使用步驟

    spring?retry實現(xiàn)方法請求重試的使用步驟

    這篇文章主要介紹了spring?retry實現(xiàn)方法請求重試及使用步驟,本文分步驟通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • 關(guān)于@EnableGlobalMethodSecurity注解的用法解讀

    關(guān)于@EnableGlobalMethodSecurity注解的用法解讀

    這篇文章主要介紹了關(guān)于@EnableGlobalMethodSecurity注解的用法解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Springboot實現(xiàn)人臉識別與WebSocket長連接的實現(xiàn)代碼

    Springboot實現(xiàn)人臉識別與WebSocket長連接的實現(xiàn)代碼

    這篇文章主要介紹了Springboot實現(xiàn)人臉識別與WebSocket長連接的實現(xiàn),本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-11-11
  • Java雪花算法的實現(xiàn)詳解

    Java雪花算法的實現(xiàn)詳解

    雪花算法(Snowflake)是一種分布式唯一ID生成算法,用于生成全局唯一的ID,使用雪花算法生成的ID通常是一個64位的整數(shù),可以根據(jù)需要進行轉(zhuǎn)換和展示,在Java等編程語言中,可以使用相應(yīng)的庫或工具來生成雪花算法的ID,本文給大家介紹了Java雪花算法的實現(xiàn)
    2023-11-11
  • Map集合之HashMap的使用及說明

    Map集合之HashMap的使用及說明

    這篇文章主要介紹了Map集合之HashMap的使用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • java如何將list中的某個元素移動位置

    java如何將list中的某個元素移動位置

    在Java編程中我們經(jīng)常會使用List數(shù)據(jù)結(jié)構(gòu)來存儲一組元素,下面這篇文章主要給大家介紹了關(guān)于java如何將list中的某個元素移動位置的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-05-05
  • Java實現(xiàn)貪吃蛇大作戰(zhàn)小游戲(附源碼)

    Java實現(xiàn)貪吃蛇大作戰(zhàn)小游戲(附源碼)

    今天給大家?guī)淼氖切№椖渴?nbsp;基于Java+Swing+IO流實現(xiàn) 的貪吃蛇大作戰(zhàn)小游戲。實現(xiàn)了界面可視化、基本的吃食物功能、死亡功能、移動功能、積分功能,并額外實現(xiàn)了主動加速和鼓勵機制,需要的可以參考一下
    2022-07-07

最新評論