一,創(chuàng)建Filter類 1.如何創(chuàng)建Filter類? 創(chuàng)建Filter類必須實(shí)現(xiàn)javax.servlet.Filter接口,在該接口中定義了三個方法: (1)void init(FilterConfig config):用于完成Filter的初始化 (2)void destroy():用于Filter銷毀前,完成某些資源的回收 (3)void doFilter(ServletRequest request,ServletResponse response,FilterChain chain):實(shí)現(xiàn)過濾功能 下面介紹一個日志Filter,這個Filter負(fù)責(zé)攔截用戶所有請求,并將請求的信息記錄在日志中。
二,配置Filter Filter可以認(rèn)為是Servlet的“增強(qiáng)版”,因此配置Filter與配置Servlet非常的相似,都需要配置如下兩個部分: 1.配置Filter名 2.配置Filter攔截URL模式 Filter配置和Servlet配置的區(qū)別? Servlet通常只配置一個URL,而Filter可以同時攔截多個請求的URL。因此,在配置Filter的URL模式時通常會使用模式字符串,使得Filter可以攔截多個請求。與配置Servlet相似的是,配置Filter同樣有兩種方式 1.在Filter通過注解進(jìn)行配置 2.在web.xml文件中通過配置文件進(jìn)行配置
@WebFilter修飾一個Filter類,用于對Filter進(jìn)行配置,它支持如下的屬性: 在web.xml文件中的配置如下
從這些代碼中可以看出配置Filter與配置Servlet非常相似,只是配置Filter時指定url-pattern為/*,即表示該Filter會攔截所有用戶請求。該Filter并未對客戶端請求進(jìn)行額外的處理,僅僅在日志中簡要記錄請求的信息。 為該Web應(yīng)用提供任意一個jsp頁面,并通過瀏覽器來訪問該JSP頁面,即可在Tomcat的控制臺看到信息。
實(shí)際上Filter和Servlet極其相似,區(qū)別只是Filter的doFilter()方法里多了一個FilterChain的參數(shù),通過該參數(shù)可以控制是否放行用戶的請求,在實(shí)際項目中,F(xiàn)ilter里doFilter()方法里的代碼就是從多個Servlet的service()方法里抽取通用代碼,通過使用Filter可以實(shí)現(xiàn)更好地代碼復(fù)用。 假設(shè)系統(tǒng)里包括多個Servlet,這些Servlet都需要進(jìn)行一些的通用處理:比如權(quán)限控制,記錄日志等,這將導(dǎo)致在這些Servlet的service()方法中有部分代碼是相同的—–為了解決這種代碼重復(fù)的問題,可以考慮把這些通用處理提取到Filter中完成,這樣各Servlet中剩下的只是特定請求相關(guān)的處理代碼,而通用處理則交給Filter完成。
下面將定義一個較為實(shí)用的Filter,該Filter對用戶請求進(jìn)行過濾,F(xiàn)ilter將通過doFilter()方法來設(shè)置request編碼的字符集,從而避免每個JSP,Servlet都需要設(shè)置;而且還會驗(yàn)證用戶是否登陸,如果用戶沒有登錄,系統(tǒng)直接跳轉(zhuǎn)到登陸頁面。
在web.xml文件中配置該文件的配置片段代碼如下:
相對應(yīng)的JSP代碼如下
|
新聞熱點(diǎn)
疑難解答