一祈噪、Filter
1.概念
當(dāng)訪問服務(wù)器的資源時(shí)尚辑,過濾器可以將請(qǐng)求攔截下來,完成一些特殊的功能杠茬。
2.作用
一般用于完成通用的操作。如:登錄驗(yàn)證宁赤、統(tǒng)一編碼處理栓票、敏感字符過濾...
3.快速入門
- 定義一個(gè)類,實(shí)現(xiàn)接口Filter
- 復(fù)寫方法
- 配置攔截路徑
- web.xml
- 注解
@WebFilter("/*")//訪問所有資源之前逗载,都會(huì)執(zhí)行該過濾器
public class FilterDemo1 implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("filterDemo1被執(zhí)行了....");
//放行
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}
4.web.xml注解
<filter>
<filter-name>demo2</filter-name>
<filter-class>cn.mouweng.web.filter.FilterDemo2</filter-class>
</filter>
<filter-mapping>
<filter-name>demo2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
5.過濾器的執(zhí)行流程
1.執(zhí)行放行前的資源
2.執(zhí)行放行后的資源
3.回來執(zhí)行過濾器放行代碼下邊的代碼
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
// 對(duì)request請(qǐng)求的消息做增強(qiáng)
System.out.println("FilterDemo2被執(zhí)行...");
//放行
filterChain.doFilter(servletRequest, servletResponse);
// 對(duì)response請(qǐng)求的消息做增強(qiáng)
System.out.println("FilterDemo2回來了...");
}
6.過濾器的生命周期
- init:在服務(wù)器啟動(dòng)后厉斟,會(huì)創(chuàng)建Filter對(duì)象,然后調(diào)用init方法擦秽。只執(zhí)行一次漩勤。用于加載資源
- doFilter:每一次請(qǐng)求被攔截資源時(shí)缩搅,會(huì)執(zhí)行。執(zhí)行多次
- destroy:在服務(wù)器關(guān)閉后究飞,F(xiàn)ilter對(duì)象被銷毀堂鲤。如果服務(wù)器是正常關(guān)閉,則會(huì)執(zhí)行destroy方法瘟栖。只執(zhí)行一次。用于釋放資源
7.過濾器配置詳解
7.1 攔截路徑配置
- 具體資源路徑:/index.jsp 只有訪問index.jsp資源時(shí)酬滤,過濾器才會(huì)被執(zhí)行
- 攔截目錄: /user/* 訪問/user下的所有資源時(shí)寓涨,過濾器都會(huì)被執(zhí)行
- 后綴名攔截: *.jsp 訪問所有后綴名為jsp資源時(shí),過濾器都會(huì)被執(zhí)行
- 攔截所有資源:/* 訪問所有資源時(shí)嘴脾,過濾器都會(huì)被執(zhí)行
7.2 攔截方式的配置
攔截方式配置:資源被訪問的方式
設(shè)置dispatcherTypes屬性
- REQUEST:默認(rèn)值蔬墩。瀏覽器直接請(qǐng)求資源
- FORWARD:轉(zhuǎn)發(fā)訪問資源
- INCLUDE:包含訪問資源
- ERROR:錯(cuò)誤跳轉(zhuǎn)資源
- ASYNC:異步訪問資源
web.xml配置
- 設(shè)置<dispatcher></dispatcher>標(biāo)簽即可
8.過濾器鏈
執(zhí)行順序:如果有兩個(gè)過濾器:過濾器1和過濾器2
- 過濾器1
- 過濾器2
- 資源執(zhí)行
- 過濾器2
- 過濾器1
順序設(shè)置:
- 注解配置:按照類名的字符串比較規(guī)則比較,值小的先執(zhí)行拇颅;如: AFilter 和 BFilter,AFilter就先執(zhí)行了韵洋。
- web.xml配置: <filter-mapping>誰定義在上邊黄锤,誰先執(zhí)行
二、Listener
1.概念
概念:web的三大組件之一鸵熟。
事件監(jiān)聽機(jī)制
- 事件 :一件事情
- 事件源 :事件發(fā)生的地方
- 監(jiān)聽器 :一個(gè)對(duì)象
- 注冊(cè)監(jiān)聽:將事件、事件源痹届、監(jiān)聽器綁定在一起。 當(dāng)事件源上發(fā)生某個(gè)事件后队腐,執(zhí)行監(jiān)聽器代碼
2.方法
ServletContextListener:監(jiān)聽ServletContext對(duì)象的創(chuàng)建和銷毀
void contextDestroyed(ServletContextEvent sce) :ServletContext對(duì)象被銷毀之前會(huì)調(diào)用該方法
void contextInitialized(ServletContextEvent sce) :ServletContext對(duì)象創(chuàng)建后會(huì)調(diào)用該方法
3.步驟
1.定義一個(gè)類柴淘,實(shí)現(xiàn)ServletContextListener接口
2.復(fù)寫方法
3.配置
web.xml
<listener>
<listener-class>cn.mouweng.web.listener.ContextLoaderListener</listener-class>
</listener>
注解
@WebListener