zh
title
Because the mountain was there
OG

用ServletFilter過濾掉接口中無用數據

JavaServletFilterExampleTutorial.png

誘因

上個月開發一個博客,後端選用SpringBoot提供RESTFUL API。

然而在開發後端接口的時候模型提供的數據并沒有過濾掉無用的數據,比如我的博客每個文章詳情的大小普遍在10KB上下,每一個分頁列表有48個文章,每次異步API調用就差不多需要500KB的流量。這也太恐怖了,估計嚇死了讀者。

對我的服務器來講應該將頻寬利用在有價值的地方, 所以決定優化一下讀者體驗,減少沒必要的頻寬占用。

怎麼做呢?

我的博客前不久才算完成,難道又要去改控制器的代碼嗎?如果選擇修改代碼,我至少需要更改三個控制器,分別是文章,視頻,小說模組的控制器。這對於懶人來講無疑不是一個噩夢。 通常修改已穩定代碼大概率導致現有功能故障,這是編程中的大禁忌。

要想優雅的方法很多,今天我就介紹最底層的那個:Servlet Filter

FILTER 接口

Filter 是一個接口類,在javax.servlet包下面

共有三個接口方法,一個doFilter方法,需要實現類自己實現;其他兩個分別是init, 和destroy, 默認空實現。

Filter

我們需要關注的是doFilter,幾乎邏輯都在裡面實現

如果我們要實現自己的Filter,只需要實現Filter接口,并在定義doFilter方法。

但是如果用于Web開發,盡量選擇java為我們提供好的,

java已經提供好的用於Web的HttpFilter

HttpFilter

創建自己的類繼承它,并重寫那個受保護的方法,且一定要調用超類的方法;切勿重寫公開的方法,如果重寫公開的方法,繼承就沒有意義了。

實現自己的Filter

用於過濾列表內容的Filter

在Spring中啟用自定義Filter有三種方法

第一種是xml配置文件, 第二種是給自定義Filter加上@WebFilter註解,并在程序入口出掃包 最後一種是Java配置文件

我用Springboot,所以選擇了最後一種

這裡只介紹最後一種

FilterConfig

測試

重啟應用程序,打開瀏覽器開發模式,切換到Network面板,發現原本的近500KB的網路流量,降到了3KB! 達到目的,NICE~

Screenshot20210715223643.png