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一直在強調 敏捷是一種思想 凡是思想的東西每個人都可以自己進行理解,比如我就覺得 結對程式設計 雖然夠創意但不如乙個人先寫,然後兩個人共同進行 審查 收穫總結一下 要清晰 要預期 要輸出 ...