Java之Filter,javafilter

來源:互聯網
上載者:User

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
當然你也可以自己去發現它的新作用嘍。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.