四殊轴、Filter的生命周期
1衰倦、Filter的生命周期描述
? ? Filter的創(chuàng)建和銷(xiāo)毀是由web服務(wù)器負(fù)責(zé)。Web應(yīng)用程序啟動(dòng)的時(shí)候梳凛,Web服務(wù)器創(chuàng)建Filter的實(shí)例對(duì)象耿币,并調(diào)用其init方法進(jìn)行初始化的操作(Filter對(duì)象只會(huì)創(chuàng)建一次,init方法也只會(huì)執(zhí)行一次)
? ? 每次Filter進(jìn)行攔截的時(shí)候韧拒,都會(huì)執(zhí)行doFilter的方法
? ? 當(dāng)服務(wù)器關(guān)閉的時(shí)候淹接,或者應(yīng)用從服務(wù)器中移除的時(shí)候十性,服務(wù)器會(huì)銷(xiāo)毀Filter對(duì)象
2、FilterConfig對(duì)象的概述
(1)FilterConfig對(duì)象的作用:
用來(lái)獲得Filter的相關(guān)的配置的對(duì)象
(2)FilterConfig對(duì)象的API
?? ?getFilterName()
?? ?getInitParameter(String name)
?? ?getInitParameterNames()
?? ?getServletContext()
3塑悼、FilterConfig的演示
五劲适、過(guò)濾器的相關(guān)配置
1、<url-pattern>的配置
? ? 完全路徑匹配:以/開(kāi)始厢蒜,例如/aaa? /aaa/bbb
? ? 目錄匹配:以/開(kāi)始霞势,例如/*? /aaa/*? /aaa/bbb/*
? ? 擴(kuò)展名匹配:不能以/開(kāi)始,以*開(kāi)始斑鸦,例如*.jsp *.do *.action
2愕贡、<servlet-name>的配置
? ? 專(zhuān)門(mén)以Servlet的配置的名稱(chēng)攔截Servlet
3、<dispatcher>的配置
? ? 默認(rèn)的情況下巷屿,過(guò)濾器會(huì)攔截請(qǐng)求固以,如果進(jìn)行轉(zhuǎn)發(fā)(需要攔截這次轉(zhuǎn)發(fā))
? ? dispatcher的取值有四個(gè):
?? ?? ? REQUEST:默認(rèn)值。默認(rèn)過(guò)濾器攔截的就是請(qǐng)求
?? ?? ? FORWARD:轉(zhuǎn)發(fā)
?? ?? ? INCLUDE:頁(yè)面包含的時(shí)候進(jìn)行攔截
?? ?? ? ERROR:頁(yè)面出現(xiàn)全局錯(cuò)誤頁(yè)面跳轉(zhuǎn)的時(shí)候進(jìn)行攔截
(十一)權(quán)限驗(yàn)證過(guò)濾器
一嘱巾、案例需求
? ? 現(xiàn)在一個(gè)網(wǎng)站上需要有登錄的功能憨琳,在登錄成功后,重定向到后臺(tái)的成功頁(yè)面(后臺(tái)的頁(yè)面有很多)旬昭。如果現(xiàn)在沒(méi)有登錄篙螟,直接在地址欄上輸入后臺(tái)頁(yè)面地址
? ? 編寫(xiě)一個(gè)過(guò)濾器,可以對(duì)沒(méi)有登錄的用戶(hù)進(jìn)行攔截(沒(méi)有登錄问拘,回到登錄頁(yè)面遍略;如果已經(jīng)登錄,放行)
二骤坐、案例登錄功能
1墅冷、創(chuàng)建表(MySQL執(zhí)行如下語(yǔ)句)
create database web05?charset utf8;
use web05;
create table user(
id int primary key auto_increment,
username varchar(20),
password varchar(20)
)charset utf8;
insert into user values (null,'aaa','123');
2、搭建項(xiàng)目的環(huán)境
3或油、代碼實(shí)現(xiàn)
三、權(quán)限驗(yàn)證的過(guò)濾器實(shí)現(xiàn)
(十二)通用的字符集編碼過(guò)濾器的分析
一驰唬、案例需求
? ? 假設(shè)網(wǎng)站需要向后臺(tái)提交中文的數(shù)據(jù)(有可能是GET顶岸,也有可能是POST),中文處理根據(jù)不同的請(qǐng)求方式叫编,處理的方式也是不同的
需要調(diào)用request.getParameter();方法接收數(shù)據(jù)辖佣,但是這時(shí)會(huì)存在亂碼,如果想調(diào)用request.getParameter()方法搓逾,無(wú)論是get還是post請(qǐng)求卷谈,提交的中文都沒(méi)有亂碼
二、增強(qiáng)一個(gè)類(lèi)的方法
1霞篡、通過(guò)上面的分析世蔗,現(xiàn)在要增強(qiáng)request的getParameter方法端逼,增強(qiáng)的過(guò)程要寫(xiě)在過(guò)濾器當(dāng)中
(1)如何增強(qiáng)一個(gè)類(lèi)中的方法?
1)繼承
必須要能夠控制這個(gè)類(lèi)的構(gòu)造
2)裝飾者
被增強(qiáng)的類(lèi)和增強(qiáng)的類(lèi)需要實(shí)現(xiàn)相同的接口
在增強(qiáng)的類(lèi)中獲得被增強(qiáng)的類(lèi)的引用
缺點(diǎn):接口中的方法過(guò)多污淋,會(huì)導(dǎo)致要重寫(xiě)很多其他的方法
3)動(dòng)態(tài)代理
類(lèi)需要實(shí)現(xiàn)接口