Java之Filter,javafilter
一、何為Filter?
Filter也稱之為過濾器,它是Servlet技術中比較激動人心的技術,WEB開發人員通過Filter技術,對web伺服器管理的所有web資源。換句話說其主要用於前台向後台傳遞資料的過濾操作。
例如Jsp, Servlet,靜態圖片檔案或靜態 html檔案等進行攔截,從而實現一些特殊的功能。例如實現URL層級的許可權存取控制、過濾禁用語、壓縮響應資訊等一些進階能。
二、在開發中的應用
首先看一下Filter在項目中的應用。
可見它在web容器和Servlet、jsp之間,類似於一個過濾器將web傳過來的垃圾資訊全部過濾掉,然後再傳給伺服器,這樣提高了一些效率。接下來從代碼中看看它是怎麼用的:
1、建立一個類,實現filter介面並實現doFilter()方法
packagecom.bjpowernode.drp.util.filter; importjava.io.IOException;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;/** * 採用Filter統一處理字元集 * @author yujie * */public classCharsetEncodingFilter implements Filter { private Stringendcoding; publicvoid destroy() {} publicvoid doFilter(ServletRequest request, ServletResponse response,FilterChainchain) throws IOException, ServletException { //System.out.println("CharsetEncodingFilter--->>>begin");//設定字元集request.setCharacterEncoding(endcoding); //繼續執行chain.doFilter(request,response); //System.out.println("CharsetEncodingFilter--->>>end");} publicvoid init(FilterConfig filterConfig) throws ServletException {this.endcoding= filterConfig.getInitParameter("encoding");System.out.println("CharsetEncodingFilter.init()-->>endcoding=" + endcoding);}}
2、在web.xml中進行配置
<filter><filter-name>CharsetEncodingFilter</filter-name><filter-class>com.bjpowernode.drp.util.filter.CharsetEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>GBK</param-value></init-param> </filter> <filter-mapping><filter-name>CharsetEncodingFilter</filter-name><url-pattern>*.jsp</url-pattern></filter-mapping>
3、訪問一個頁面看看能否進行控制
三、深入Filter應用情境
1>通過控制對chain.doFilter的方法的調用,來決定是否需要訪問目標資源。
比如,可以在使用者權限驗證等等。判斷使用者是否有訪問某些資源的許可權,有許可權允許存取,沒許可權不執行chain.doFilter方法。
2>通過在調用chain.doFilter方法之前,做些處理來達到某些目的。
比如,解決中文亂碼的問題等等。可以在doFilter方法前,執行佈建要求編碼與響應的編碼。甚至可以對request介面進行封裝裝飾來處理get請求方式的中文亂碼問題(重寫相應的request.getParameter方法)。
3>通過在調用chain.doFilter方法之後,做些處理來達到某些目的。
比如對整個web網站進行壓縮。在調用chain.doFilter方法之前用類A對response對象進行封裝裝飾,重寫getOutputStream和重寫getWriter方法。在類A內部中,將輸出內容緩衝進ByteArrayOutputStream流中,然後在chain.doFilter方法執行後,擷取類A中ByteArrayOutputStream流快取資料,用GZIPOutputStream流進行壓縮下。
四、Filter生命週期
簡單的一句話和Servlet一樣Filter的建立和銷毀也是由WEB伺服器負責。簡單過程如下:
init()->doFilter()->destroy()
注意:init方法與destroy方法只會執行一次。
五、總結
以上就是對Java中filter的簡單理解,簡單的一句話:filter就是一個過濾器。它的功能很強大,希望在今後的學習中漸漸深入。
java過濾器中實現Filter的類怎寫
web.xml設定檔
<filter>
<filter-name>SessionFilter</filter-name>
<filter-class>com.qhit.system.tools.SessionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SessionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
java類
public class ConnFilter extends HttpServlet implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterchain) throws IOException, ServletException
{
try
{
filterchain.doFilter(request, response);此處為過濾鏈 理解為請求通過該過濾繼續前行 可在此處加上判斷 如果TRUE執行該語句 有過FALSE 則直接跳轉其他頁面 常用於判斷是否有許可權進入某頁面
}
finally
{
DBUtils.close();
}
}
在JAVA中filter有什作用?
你說的是servlet filter吧。你應該知道servlet吧,servlet裡的request和response對象代表什麼也清楚吧,那麼我下面的解釋你就明白了:
Filter使使用者可以改變一個 request和修改一個response. Filter 不是一個servlet,它不能產生一個response,它能夠在一個request到達servlet之前預先處理request,也可以在離開 servlet時處理response.換種說法,filter其實是一個”servlet chaining”(servlet 鏈).
通俗點說法filter相當於加油站,request是條路,response是條路,目的地是servlet,這個加油站設在什麼地方對什麼資料操作可以由你來控制。
以下是servlet filter的一些常見應用場合,
(1)認證Filter
(2)日誌和審核Filter
(3)圖片轉換Filter
(4)資料壓縮Filter
(5)密碼Filter
(6)令牌Filter
(7)觸發資源訪問事件的Filter
(8)XSLT Filter
(9)媒體類型鏈Filter
當然你也可以自己去發現它的新作用嘍。