Servlet過濾器-日誌記錄
一,什麽是servlet過濾器?
過濾器是在數據交互之間過濾數據的中間組件,獨立於任何平臺或者 Servlet 容器。
Servlet過濾器可以應用在客戶機和 servlet 之間、servlet 和 servlet 或 JSP 頁面之間,以及所包括的每個 JSP 頁面之間。
二,sevlet過濾器的作用
servlet過濾器用於根性進入servlet的請求和走出servlet的相應中的有效負載和頭信息。過濾器不產生響應,他們只修改或適配請求和響應。servlet過濾器即filter可以認為是servlet的一種加強版,它主要用於對用戶親求進行預處理。
filter的主要用處:1,在HttpServletRequest到達Servlet之前,攔截客戶的HttpServletRequest。
2,根據需要檢查HttpServletRequest,也可以修改HttpServletRequest頭和數據。
3,在HttpServletRequest到達客戶端之前,攔截HttpServletResponse。
4,根據需要檢查HttpServletResponse,也可以修改HttpServletResponse頭和數據。
filter的典型用例:身份驗證,日誌記錄,數據壓縮和加密
三,使用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
最後的實驗結果如下:
Servlet過濾器-日誌記錄