Filter總結

Filter可用於處理中文亂碼等問題。

1.Filter(過濾器)

用於對用戶訪問一個web資源前對請求做預處理。常應用於非法登錄、權限管理等。Filter可認爲是Servlet的一種“變種”,它主要用於對用戶請求進行預處理,也可以對HttpServletResponse進行後處理,是個典型的處理鏈。

FilterServlet的區別:

它與Servlet的區別在於:它不能直接向用戶生成響應。完整的流程是:Filter對用戶請求進行預處理,接着將請求交給Servlet進行處理並生成響應,最後Filter再對服務器響應進行後處理。

 

2.如何寫Filter:

方式1implements Filter

方式2Do  it

 

3.Fc:FilterChain 過濾鏈

Fc.doFilter(req,res)訪問下一個資源

 

4.Filter實現防止非法登錄:

//MyFilter.java

public class MyFilter implements Filter {

 

    public void destroy() {

    }

 

    public void doFilter(ServletRequest req, ServletResponse res,

           FilterChain fc) throws IOException, ServletException {

      

       HttpServletRequest request = (HttpServletRequest) req;

       HttpServletResponse response = (HttpServletResponse) res;

      

       HttpSession session = request.getSession();

       if((String)session.getAttribute("userName")==null){

          

           response.sendRedirect("/servlet_session_project/index.jsp");

 

    }

       fc.doFilter(req, res);

    }

 

    public void init(FilterConfig arg0) throws ServletException {

      

 

    }

}

//web.xml

<filter>

    <filter-name>myfilter</filter-name>

    <filter-class>com.cqit.edu.common.MyFilter</filter-class>

</filter>

<filter-mapping>

    <filter-name>myfilter</filter-name>

    <url-pattern>/jsp/*</url-pattern>

</filter-mapping>

 

/* 表示對jsp文件夾的文件全部過濾,採用Filter防止非法登錄可以實現對大量的文件進行過濾。而如果在跳轉的頁面裏實現,則需要每個頁面都要設置。

 

5.Filter實現中文亂碼處理

//FilterChar.java

public class FilterChar extends HttpServlet implements Filter {

 

    public void doFilter(ServletRequest req, ServletResponse res,

           FilterChain fc) throws IOException, ServletException {

       req.setCharacterEncoding("GBK");

       res.setCharacterEncoding("GBK");

       fc.doFilter(req, res);

    }

    public void init(FilterConfig arg0) throws ServletException {

      

    }

}

//web.xml

<filter>

    <filter-name>filter1</filter-name>

    <filter-class>com.cqit.edu.common.FilterChar</filter-class>

</filter>

 

<filter-mapping>

    <filter-name>filter1</filter-name>

    <url-pattern>/*</url-pattern>

</filter-mapping>

 

req.setCharacterEncoding("GBK");是解決後臺中讀取文亂碼問題

res.setCharacterEncoding("GBK");是解決前臺響應中文亂碼問題

發佈了26 篇原創文章 · 獲贊 5 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章