Filterj是一種java元件
類似servlet,主要用在處理Servlet之前
先進行一些特定的處理
或是當Servlet完成後再去做特殊的處理
再回傳給client
主要也是設定在DD(Web.xml)裡
request的功能 => 即在執行Servlet前先做的處理
執行安全性檢查
重新格式化request的head或body
稽查或記錄request
response的功能 => 即在執行Servlet後所做的處理
壓縮回應串流
附加或修改回應串流
建立全然不同的response
life cycle
Filter的生命週期就如同Servlet
主要有三個特性:
所以Filter的life cycle可分為:
private FilterConfig f;
public void init(FilterConfig fConfig) throws ServletException {
this.f= fConfig;
}
DD的宣告方式
主要有三個步驟
<filter>
<filter-name>FilterNameRequest</filter-name>
<filter-class>com.Filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterNameRequest</filter-name>
<servlet-name>LoginServlet</servlet-name>
</filter-mapping>
<filter-mapping>
<filter-name>FilterNameRequest</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>FilterNameRequest</filter-name>
<url-pattern>*.do</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
Container排序filter的規則:
只要跟DD所設定的URL所有相符的filter都會被呼叫,由DD設定的順序去執行
定義:
因為filter在處裡response時,FilterChain.doFilter(resquest,response)
已經將回應傳回client了,這樣並無法去實作response的狀況
因此wrpper class提供了一種可以實作的HttpServletResponse interface
FilterChain.doFilter(resquest,wrpperObj);
//將本來的response傳入一個wrpperObj,進行相關處理
//由wrpper決定response要回應的東西
今天也先概略的整理一下重點
接下來結合filter和Listener
去做一些小練習