Servlet過濾器-日誌記錄

一,什麼是servlet過濾器?java

過濾器是在數據交互之間過濾數據的中間組件,獨立於任何平臺或者 Servlet 容器。web

Servlet過濾器能夠應用在客戶機和 servlet 之間、servlet 和 servlet 或 JSP 頁面之間,以及所包括的每一個 JSP 頁面之間。app

二,sevlet過濾器的做用webapp

servlet過濾器用於根性進入servlet的請求和走出servlet的相應中的有效負載和頭信息。過濾器不產生響應,他們只修改或適配請求和響應。servlet過濾器即filter能夠認爲是servlet的一種增強版,它主要用於對用戶親求進行預處理。jsp

filter的主要用處:1,在HttpServletRequest到達Servlet以前,攔截客戶的HttpServletRequest。函數

        2,根據須要檢查HttpServletRequest,也能夠修改HttpServletRequest頭和數據。post

        3,在HttpServletRequest到達客戶端以前,攔截HttpServletResponse。gradle

        4,根據須要檢查HttpServletResponse,也能夠修改HttpServletResponse頭和數據。加密

filter的典型用例:身份驗證,日誌記錄,數據壓縮和加密url

三,使用filter寫日誌

建立Filter必須實現javax.servlet.Filter接口,接口的的三個方法以下:

init(FilterConfig config):這是Servlet過濾器的初始化方法,Servlet容器建立Servlet過濾器實例後將調用這個方法。在這個方法中能夠讀取web.xml文件中Servlet過濾器的初始化參數。
destroy():Servlet容器在銷燬過濾器實例前調用該方法,這個方法中能夠釋放Servlet過濾器佔用的資源。
doFilter(ServletRequest req, ServletResponse resp, FilterChain chain):這個方法完成實際的過濾操做,當客戶請求訪問於過濾器關聯的URL時,Servlet容器將先調用過濾器的doFilter方法。FilterChain參數用於訪問後續過濾器。

咱們能夠使用註解(@WebFilter)的方式來定義一個filter,在urlPattens中指定你想要攔截的url地址,在此次實驗中我攔截的是所有的用戶請求地址(/*),filter的配置方式與servlet的配置方式擦汗很少,如今開始實際操做一下吧!

 

我使用的是gradle官網的構建webapplication的例子,用戶首先訪問到的是index.jsp,在界面中,設置了一個提交按鈕,經過post方法提交表單,而且交給servlet處理,再經過forward函數設置處理的文件爲response.jsp

如下是一些實驗文件及結果:

HelloServlet.java

 

 LogFilter.java

 

 

index.jsp

response.jsp

最後的實驗結果以下:

相關文章
相關標籤/搜索