一、filter的概念及功能
Filter就像用濾紙來過濾雜物一樣,它也叫過濾器。過濾器是Servlet2.3之後新增加的功能,它可以更變一個request請求也可以修改一個response。它可以在request到達Servlet之前預處理request,他也可以在response離開Servlet時處理response,總之,可以叫他Servlet鏈。一般作用在一下方面:
1.在request到達Servlet之前:
1)對用戶的請求統一的認證;
2)編碼的轉換;
3)對用戶發過來的數據進行替換,也可以進行加密行為等。
2.在response離開Servlet之後:
1)修改response的頭及數據等。
二、代碼實現
首先要實現 javax.servlet.Filter接口以及三個方法:
1. init(FilterConfig filterConfig)-->初始化過濾器多用於獲取初始化參數。
2.doFilter(ServletRequest servletRequest , ServletResponse servletResponse , FilterChain chain )-->過 濾處理的相關操作都在這裡完成,需要調chain.doFilter(servletRequest ,servletResponse )方法,把請求繼續向 後傳遞,可以是對下一個過濾器doFilter方法的調用,或者相應的web組件。所以Filter采用了職責鏈設計模式。
3.destroy() 過濾器銷毀 Servlet容器在銷毀過濾器實例之前該方法得到調用,以釋放占用的資源。
最後編碼的實現:
對用戶的請求統一的認證,獲取用戶名,如果用戶名為空,則調到登錄界面,否則放行。
@webFilter裡相關屬性的介紹:
屬性名 類型 描述
filterName String 指定過濾器的name屬性,等價於<filter-name>
value String[] 該屬性等價於urlPatterns屬性,兩者不能同時使用
urlPatterns String[] 指定過濾器的URL匹配模式,等價於<url-pattern>
servletNames String[] 指定過濾器將應用到哪些Servlet。取值是@WebServlet的name屬性或者<servlet-name>的值
dispatcherTypes DispatcherType 指定過濾器的轉發模式,取值有:ASYNC ERROR FORWARD INCLUDE REQUEST
initParams WebInitParam[] 指定一組過濾器初始化參數,等價於<init-Param>
asyncSupported boolean 指定過濾器是否支持異步操作模式,等價於<async-supported>
description String 該過濾器的描述信息,等價於<description>
displayName String 該過濾器的顯示名,通常配合工具使用,等價於<display-name>