天天看點

Servlet3.0過濾器

Servlet3.0過濾器

       Servlet3.0裡面的過濾器跟以前版本的一樣,還是需要實作javax.servlet.Filter接口。Filter接口中定義了三個方法,init(FilterConfig filterConfig)、destroy()和doFilter(HttpRequest request, HttpServletResponse response, FilterChain chain)。

       init()方法會在Filter初始化後進行調用,在init()方法裡面我們可以通過FilterConfig通路到初始化參數(getInitParameter()或getInitParameters())、ServletContext(getServletContext)和目前Filter部署的名稱(getFilterName())等資訊。destroy()方法将在Filter被銷毀之前調用。而doFilter()方法則是真正進行過濾處理的方法,在doFilter()方法内部,我們可以過濾請求的request和傳回的response,同時我們還可以利用FilterChain把目前的request和response傳遞給下一個過濾器或Servlet進行處理。

       至于Filter的配置,在Servlet3.0中我們除了使用傳統的方式在web.xml檔案中進行配置以外,還可以使用注解的方式進行配置。使用注解的方式配置時我們需要在Filter實作類上用@WebFilter注解進行标注,然後指定其urlPatterns屬性或者value屬性。@WebFilter注解的可配置屬性和@WebServlet的可配置屬性基本上是差不多的。在@WebFilter中urlPatterns屬性和value屬性都可以用來指定目前Filter要過濾的請求位址,且它們都是數組形式,支援同時指定多個位址進行過濾,但是不能同時指定urlPatterns屬性和value屬性,如果同時指定了urlPatterns屬性和value屬性則請求位址過濾會失效,這個時候就隻能通過servletNames來進行過濾了。除了urlPatterns屬性和value屬性外,@WebFilter還可以指定以下幾個比較重要的屬性:

l  initParams:用于指定初始化參數的,其内容是一個@WebInitParam數組,其中每一個@WebInitParam代表一個初始化參數。

l  dispatcherTypes:指定Filter需要過濾的dispatcher類型,它是一個數組類型,裡面的每一個元素都是枚舉DispatcherType的一個元素。支援的元素有ASYNC、ERROR、REQUEST、FORWARD和INCLUDE,預設是REQUEST。

l  servletNames:字元串數組類型,指定需要過濾的servlet名稱。servletNames過濾跟url過濾是不一樣的,如果指定的servletNames跟urlPatterns或value有重複的,則目前過濾器會執行兩次。

       使用注解進行配置:

       在web.xml中進行配置:

繼續閱讀