一馅袁、過(guò)濾器(Filter):
1.filter的簡(jiǎn)介:
filter是對(duì)客戶端訪問(wèn)資源的過(guò)濾诵竭,符合條件放行褂痰,不符合條件不放行直晨,并且可以對(duì)目 標(biāo)資源訪問(wèn)前后進(jìn)行邏輯處理搀军。
2.快速入門(mén):
1)編寫(xiě)一個(gè)過(guò)濾器的類(lèi)實(shí)現(xiàn)Filter接口
2)實(shí)現(xiàn)接口中尚未實(shí)現(xiàn)的方法(著重實(shí)現(xiàn)doFilter方法)
public class QuickFilter1 implements Filter{
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("quick1 running...");
//放行請(qǐng)求
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
3)在web.xml中進(jìn)行配置(主要是配置要對(duì)哪些資源進(jìn)行過(guò)濾)
<filter>
<filter-name>QuickFilter1</filter-name>
<filter-class>com.zl.web.filter.QuickFilter1</filter-class>
</filter>
<filter-mapping>
<filter-name>QuickFilter1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3.Filter的API詳解:
(1)filter生命周期及其與生命周期相關(guān)的方法:
Filter接口有三個(gè)方法,并且這個(gè)三個(gè)都是與Filter的生命相關(guān)的方法
init(Filterconfig):代表filter對(duì)象初始化方法 filter對(duì)象創(chuàng)建時(shí)執(zhí)行
doFilter(ServletRequest,ServletResponse,FilterCha):代表filter執(zhí)行過(guò)濾的核心方法勇皇,如果某資源在已經(jīng)被配置到這個(gè)filter進(jìn)行過(guò)濾的話罩句,那么每次訪問(wèn)這個(gè)資源都會(huì)執(zhí)行doFilter方法
destory():代表是filter銷(xiāo)毀方法 當(dāng)filter對(duì)象銷(xiāo)毀時(shí)執(zhí)行該方法
Filter對(duì)象的生命周期:
Filter何時(shí)創(chuàng)建:服務(wù)器啟動(dòng)時(shí)就創(chuàng)建該filter對(duì)象
Filter何時(shí)銷(xiāo)毀:服務(wù)器關(guān)閉時(shí)filter銷(xiāo)毀
(2)Filter的AP詳解:
1)init(FilterConfig):
其中參數(shù)config代表 該Filter對(duì)象的配置信息的對(duì)象,內(nèi)部封裝是該filter的配置信息敛摘。
2)destory()方法:
filter對(duì)象銷(xiāo)毀時(shí)執(zhí)行
3)doFilter方法:
doFilter(ServletRequest,ServletResponse,FilterChain)
其中的參數(shù):
ServletRequest/ServletResponse:每次在執(zhí)行doFilter方法時(shí) web容器負(fù)責(zé)創(chuàng)建一個(gè)request和一個(gè)response對(duì)象作為doFilter的參數(shù)傳遞進(jìn)來(lái)门烂。該request和該response就是在訪問(wèn)目標(biāo)資源的service方法時(shí)的request和response。
FilterChain:過(guò)濾器鏈對(duì)象,通過(guò)該對(duì)象的doFilter方法可以放行該請(qǐng)求
url-pattern配置時(shí):
1)完全匹配 /sertvle1
2)目錄匹配 /aaa/bbb/* ----最多的
/user/:訪問(wèn)前臺(tái)的資源進(jìn)入此過(guò)濾器
/admin/:訪問(wèn)后臺(tái)的資源時(shí)執(zhí)行此過(guò)濾器
3)擴(kuò)展名匹配 *.abc *.jsp
dispatcher:訪問(wèn)的方式(了解)
REQUEST:默認(rèn)值屯远,代表直接訪問(wèn)某個(gè)資源時(shí)執(zhí)行filter
FORWARD:轉(zhuǎn)發(fā)時(shí)才執(zhí)行filter
INCLUDE: 包含資源時(shí)執(zhí)行filter
ERROR:發(fā)生錯(cuò)誤時(shí) 進(jìn)行跳轉(zhuǎn)是執(zhí)行filter
Filter的作用:
1)公共代碼的提取
2)可以對(duì)request和response中的方法進(jìn)行增強(qiáng)(裝飾者模式/動(dòng)態(tài)代理)
3)進(jìn)行權(quán)限控制