1. 程式人生 > >Servlet過濾器-日誌記錄

Servlet過濾器-日誌記錄

tps xml文件 使用 servlet onf index.jsp troy hello blog

一,什麽是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過濾器-日誌記錄