Java Web之filter、listener、Interceptor
**
1、Servlet
**
Servlet 是服務(wù)端的 Java 應(yīng)用程序,用于處理HTTP請求,做出相應(yīng)的響應(yīng)。
當(dāng)客戶端向服務(wù)器發(fā)出HTTP請求時(shí),首先會(huì)由服務(wù)器中的 Web 容器(如Tomcat)對請求進(jìn)行路由,交給該URL對應(yīng)的 Servlet 進(jìn)行處理,Servlet 所要做的事情就是返回適當(dāng)?shù)膬?nèi)容給用戶。
在這里,我順便談?wù)勛约簩?JSP 和 Servlet 兩者關(guān)系的理解。JSP 頁面實(shí)際是被轉(zhuǎn)換成了 Servlet 的形式運(yùn)行,也就是說,我們可以將不同的 JSP 頁面視為不同的 Servlet,理論上它們中的每一個(gè)都能夠?qū)蛻舳苏埱笞龀鲰憫?yīng),只不過這些 Servlet 可能會(huì)將請求轉(zhuǎn)發(fā)給其它 Servlet 進(jìn)行處理,進(jìn)而由其它 Servlet 做出響應(yīng)。
要?jiǎng)?chuàng)建自己的 Servlet,可以通過以下三種方式來實(shí)現(xiàn)
它們的 package 分別是:javax.servlet.Servlet、javax.servlet.GenericServlet、javax.servlet.http.HttpServlet。
**
2、Filter(過濾器)
**
Filter 是介于 Web 容器和 Servlet 之間的過濾器,用于過濾未到達(dá) Servlet 的請求或者由 Servlet 生成但還未返回響應(yīng)。
客戶端請求從 Web 容器到達(dá) Servlet 之前,會(huì)先經(jīng)過 Filter,由 Filter 對 request 的某些信息進(jìn)行處理之后交給 Servlet。
同樣,響應(yīng)從 Servlet 傳回 Web 容器之前,也會(huì)被 Filter 攔截,由 Filter 對 response 進(jìn)行處理之后再交給 Web 容器。
若要?jiǎng)?chuàng)建自定義 Filter,需要實(shí)現(xiàn) javax.servlet.Filter 接口。
**
3、Listener(監(jiān)聽器)
**
Listener 是用于監(jiān)聽某些特定動(dòng)作的監(jiān)聽器。當(dāng)特定動(dòng)作發(fā)生時(shí),監(jiān)聽該動(dòng)作的監(jiān)聽器就會(huì)自動(dòng)調(diào)用對應(yīng)的方法。
以 HttpSessionListener 為例:
該 Listener 監(jiān)聽 session 的兩種狀態(tài),即創(chuàng)建和銷毀。當(dāng) session 被創(chuàng)建時(shí),會(huì)自動(dòng)調(diào)用 HttpSessionListener 的 sessionCreated() 方法,我們可以在該方法中添加一些處理邏輯。當(dāng) session 被銷毀時(shí),則會(huì)調(diào)用 sessionDestroyed() 方法。
下面是 Servlet 中的 8 個(gè) Listener 接口,可分為三類:
第一類,ServletContext 相關(guān)接口
第二類,HttpSession 相關(guān)接口
第三類,ServletRequest 相關(guān)接口
**
4、攔截器Interceptor(Spring MVC)
**
類似 面向切面編程 中的 切面 和 通知,我們通過 動(dòng)態(tài)代理 對一個(gè) service() 方法添加 通知 進(jìn)行功能增強(qiáng)。比如說在方法執(zhí)行前進(jìn)行 初始化處理,在方法執(zhí)行后進(jìn)行 后置處理。攔截器 的思想和 AOP 類似,區(qū)別就是 攔截器 只能對 Controller 的 HTTP 請求進(jìn)行攔截。
**
5、過濾器 VS 攔截器
**
5.1 兩者的區(qū)別
5.2 執(zhí)行順序
對于自定義 Servlet 對請求分發(fā)流程:
對于自定義 Controller 的請求分發(fā)流程:
總結(jié)
以上是生活随笔為你收集整理的Java Web之filter、listener、Interceptor的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 月销20万辆的奇瑞,还能否赶上新能源的末
- 下一篇: Java web之web.xml配置详解