最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java過濾器@WebFilter用法詳解

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

簡(jiǎn)單介紹

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

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

優(yōu)勢(shì)

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

方法

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

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

過濾器原理

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

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

創(chuàng)建過濾器

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

代碼演示

Filter的三個(gè)階段就對(duì)應(yīng)著Filter的3個(gè)方法,init方法會(huì)在Filter創(chuàng)建時(shí)調(diào)用,doFilter方法會(huì)在請(qǐng)求和攔截匹配時(shí)調(diào)用,destroy方法會(huì)在Filter銷毀時(shí)調(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("對(duì)01 request 進(jìn)行過濾");
        filterChain.doFilter(servletRequest, servletResponse);
        System.out.println("對(duì)01 response 過濾");
    }

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

啟動(dòng)服務(wù)器控制臺(tái)輸出

進(jìn)行攔截時(shí)控制臺(tái)輸出

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

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

多個(gè)過濾器

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("對(duì)02 request 進(jìn)行過濾");
        filterChain.doFilter(servletRequest, servletResponse);
        System.out.println("對(duì)02 response 過濾");
    }

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

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

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

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

總結(jié)

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

相關(guān)文章

  • java發(fā)送內(nèi)嵌圖片郵件

    java發(fā)送內(nèi)嵌圖片郵件

    這篇文章主要介紹了java發(fā)送內(nèi)嵌圖片郵件,在博客系統(tǒng)中需要郵件服務(wù)的功能,僅僅是發(fā)送文本內(nèi)容,現(xiàn)在嘗試一下發(fā)送內(nèi)嵌圖片郵件,感興趣的小伙伴們可以參考一下
    2016-01-01
  • 深入理解Java設(shè)計(jì)模式之職責(zé)鏈模式

    深入理解Java設(shè)計(jì)模式之職責(zé)鏈模式

    這篇文章主要介紹了JAVA設(shè)計(jì)模式之職責(zé)鏈模式的的相關(guān)資料,文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解
    2021-11-11
  • mybatis?plus常用注解的具體使用

    mybatis?plus常用注解的具體使用

    本文主要介紹了mybatis?plus常用注解的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • java 矩陣乘法的mapreduce程序?qū)崿F(xiàn)

    java 矩陣乘法的mapreduce程序?qū)崿F(xiàn)

    這篇文章主要介紹了java 矩陣乘法的mapreduce程序?qū)崿F(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Linux服務(wù)器Java進(jìn)程消失問題解決

    Linux服務(wù)器Java進(jìn)程消失問題解決

    這篇文章主要介紹了Linux服務(wù)器Java進(jìn)程消失問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 深入理解Spring?Boot中的Flyway

    深入理解Spring?Boot中的Flyway

    Flyway將數(shù)據(jù)庫結(jié)構(gòu)的變更定義為一系列遷移腳本,通常是SQL腳本文件,當(dāng)應(yīng)用程序啟動(dòng)時(shí),F(xiàn)lyway會(huì)自動(dòng)檢測(cè)并執(zhí)行未應(yīng)用的遷移腳本,將數(shù)據(jù)庫升級(jí)到最新版本,這篇文章主要介紹了深入理解Spring?Boot中的Flyway,需要的朋友可以參考下
    2024-01-01
  • Spring Boot 訪問安全之認(rèn)證和鑒權(quán)詳解

    Spring Boot 訪問安全之認(rèn)證和鑒權(quán)詳解

    這篇文章主要介紹了Spring Boot 訪問安全之認(rèn)證和鑒權(quán),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • java:Apache Commons Configuration2占位符使用方式

    java:Apache Commons Configuration2占位符使用方式

    Apache Commons Configuration2中的占位符功能允許在配置值中引用其他配置屬性或外部值,通過`${前綴:鍵名}`格式實(shí)現(xiàn),它提供了多種默認(rèn)的Lookup實(shí)現(xiàn),如base64編碼/解碼、日期格式化、環(huán)境變量、文件讀取等,此外,還支持自定義占位符實(shí)現(xiàn),以滿足特定需求
    2025-12-12
  • Java實(shí)現(xiàn)域名解析的示例詳解(附帶源碼)

    Java實(shí)現(xiàn)域名解析的示例詳解(附帶源碼)

    這篇文章將從理論到實(shí)踐和從代碼到測(cè)試,全方位地講解如何利用?Java?實(shí)現(xiàn)一個(gè)簡(jiǎn)單的域名解析器,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-03-03
  • Spring Boot命令行運(yùn)行器的實(shí)現(xiàn)方法

    Spring Boot命令行運(yùn)行器的實(shí)現(xiàn)方法

    這篇文章主要介紹了Spring Boot命令行運(yùn)行器的實(shí)現(xiàn)方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-10-10

最新評(píng)論

涿州市| 米泉市| 封开县| 广宁县| 岢岚县| 海口市| 拉孜县| 独山县| 新晃| 浑源县| 泰州市| 锦州市| 嘉定区| 平顶山市| 工布江达县| 鄂托克前旗| 涡阳县| 建宁县| 滁州市| 高平市| 门头沟区| 乡宁县| 城固县| 三台县| 高淳县| 泾川县| 永福县| 云梦县| 凌海市| 阿勒泰市| 青岛市| 阜新| 昌乐县| 云南省| 前郭尔| 林西县| 开封县| 扶绥县| 改则县| 巴马| 澳门|