Filter,一種aop程式設計思想的體現

2021-12-30 05:35:31 字數 2290 閱讀 3482

filter是servlet規範裡的乙個高階特性,只用於對request、response的進行修改。

filter提出了filterchain的概念,客戶端請求request在抵達servlet之前都會經過filterchain裡的所有fiter,如圖所示:

在web.xml中配置filter,當啟動伺服器時會例項化,並且會初始化,當有網路請求時會進行過濾操作,當 伺服器關閉時,會進行銷毀,全過程如下圖所示:

filter類需實現fiter介面,需複寫裡面的三個方法,其中init(),在初始化時呼叫;dofiler()方法每次都會呼叫,在這個方法中一定要執行chain.dofilter(),否則request不會交給後面的filter或者servler;ondestroy()在關閉伺服器時呼叫。

public class firstfilter implements filter

@override

public void dofilter(servletrequest request, servletresponse response, filterchain chain) throws ioexception, servletexception

@override

public void init(filterconfig filterconfig) throws servletexception

配置filter:

firstfilter

com.forezp.filter.firstfilter

firstfilter

/index.jsp

*.do

request

其中,url_pattern可以配置多個,也可以用萬用字元,當訪問滿足路徑匹配,並且符合dispatcher時,request會被filter攔截進行處理,處理完後的response再次被filter攔截,可以進行處理。

其中dispatcher 預設request,四種不同的dispatcher:

request:請求時有效

forward:當某servlet通過forward到該servlet才有效

include: jsp通過< jsp: incluser/> 請求servlet有效

error: < %@page errorpage=」」 % >有效

filter的特性使它可以處理特殊的工作,例如防盜煉,字元編碼的處理,日誌記錄,資料加密,過濾一些黑詞等等。

例如: 防盜煉,當其他**請求本**資源時顯示錯誤的,只有本應用先生的才顯示正確的,**如下:

public class imagefilter implements filter

public void dofilter(servletrequest req,servletresponse res,filterchain chain)throws exceptionelse

}public void destroy(){}

}在web.xml中配置:

imagefilter

com.forezp.imagefilter

imagefilter

/images/*

當訪問images下的所有會經過該filter,根據訪問頭資訊,如果說本站點的訪問則顯示正確,否則先生錯誤。直接上**:

public class charsetfilter implements filter

public void dofilter(servletrequest req,servletresponse res,filterchain chain)throws exception

chain.dofilter(req,res);

}public void destroy()

}在web.xml中配置:

charsetfilter

com.forezp.charsetfilter

characterencoding

utf-8

enabled

true

charsetfilter

/*其中頁面編碼方式也必須一致,希望全部用utf-8,另外需要配置tomcat的/config/server.xml編碼:

另外,還有比較常見的日誌記錄filter、異常捕捉filter、許可權校驗、內容替換filter等等。

filter有很大的彈性機制,功能強大,而且跟servlet、jsp沒耦合.filter是現在面向切面程式設計aop的一種思想體現,它能夠勝任很多任務作。

2.5的fiter需要在web.xml中配置,執行順序按照配置順序,另外3.0可以用註解的方式配置filter,此時沒有配置的順序。

AOP程式設計思想

面向切面程式設計 這是最近接觸到的思想。看名字感覺很新奇,其實就是在底層實現攔截呼叫。通俗點,如果你不小心踩到狗屎,心理不平衡時,你可以在人人都會走過的路上放一坨狗屎,這樣,路過的人都會踩到狗屎。這樣你就實現了面向切面程式設計 個人理解 關鍵字 切面,攔截。用途 操作日誌,許可權驗證等。老規矩介面先...

一種編碼思想

舉例子,分類任務中,一般我們會根據類別個數確定輸出的通道,但是這樣不是那麼環保 如果類別個數發生變化,就需要修改網路結構,至少是輸出層要修改 這樣帶來的問題就很明顯,需要重新訓練,儘管可以加在前面的預訓練權重 一種應用場景,如人臉門禁系統,公司說不定哪天找來了新員工,就需要錄入 如果使用類別確定的輸...

敏捷是一種思想

軟體工程中有各種思想來對抗複雜度的增加,敏捷 agile 就是其中的一種。周一參加了 敏捷初步 的培訓,fido一直在強調 敏捷是一種思想 凡是思想的東西每個人都可以自己進行理解,比如我就覺得 結對程式設計 雖然夠創意但不如乙個人先寫,然後兩個人共同進行 審查 收穫總結一下 要清晰 要預期 要輸出 ...