這篇文章主要介紹了JavaWeb Servlet中Filter過濾器的詳解的相關資料,希望透過本文能幫助到大家,讓大家徹底掌握如何使用,需要的朋友可以參考下
JavaWeb Servlet中Filter過濾器的詳解
1.簡述
Filter過濾器,對web伺服器所有web資源進行過濾,從而實現一些特殊的功能(權限存取控制、過濾敏感詞彙、壓縮回應資訊)。 Filter能夠對Servlet容器的請求和回應進行檢查和修改,其本身不能產生請求request和回應response,只提供過濾作用(Servlet被呼叫之前檢查Request物件修改其相關訊息,Servlet被調用後檢查Response修改其相關資訊),Filter物件常駐伺服器。
2.Lifecycle
(1).啟動伺服器,並讀取設定檔web.xml,載入Filter類別並實例化,調用init();
(2).使用者存取的資源被Filter的url-pattern匹配,並且呼叫doFilter(),要過濾的物件透過chain.doFilter()方法交給下個過濾器處理;
# (3).套用被停止或重新裝載,則呼叫destroy().
#3.chain過濾鏈
# 兩個過濾器有不同的過濾作用,伺服器會依照web.xml中過濾器定義的先後循序組裝成一條鏈,透過chain.doFilter()依序執行每個過濾器的doFilter()。執行過程中任何時候都可以打斷,只要不執行chain.doFilter()就不會再執行後面的過濾器和請求的內容。
(1).繼承Filter介面,並複製doFilter()方法
web.xml的配置,以篩選符合要求的操作
/* * MyFilter.java * 过滤器 */ package com.baidu.web; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class MyFilter implements Filter{ @Override public void destroy() { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { //对请求request进行处理 HttpServletResponse resp = (HttpServletResponse)response; HttpServletRequest req = (HttpServletRequest) request; String username = (String) req.getSession().getAttribute("username"); if(req.getRequestURI().contains("Buy") || req.getRequestURI().contains("collect")){ if(username==null || username.equals("")){ //满足过滤要求,进行处理 req.getRequestDispatcher("/login.jsp").forward(req, resp); return; } } chain.doFilter(req, resp); //对相应response进行处理 } @Override public void init(FilterConfig filterConfig) throws ServletException { //filterConfig,通过filterConfig的getServletContext() 方法可以获得 ServletContext } }
以上是JavaWeb Servlet中關於Filter過濾器的實例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!