JSP過濾器和監聽器

什么是過濾器

?????? Servlet過濾器與Servlet十分相似,但它具有攔截客戶端(瀏覽器)請求的功能,Servlet過濾器可以改變請求中的內容,來滿足實際開發中的需要。

?????? 對于程序開發人員而言,過濾器實質就是在Web應用服務器上的一個Web應用組件,用于攔截客戶端(瀏覽器)與目標資源的請求,并對這些請求進行一定過濾處理再發送給目標資源,過濾器的處理方式如下圖所示。

過濾器核心對象

????? 過濾器對象放置在javax.servlet包中,其名稱為Filter,它是一個接口。

????? 除這個接口外,與過濾器相關的對象還有FilterConfig對象FilterChain對象,這個兩個對象也同樣是接口對象,位于javax.servlet包中,分別為過濾器的配置對象與過濾器的傳遞工具。過濾器創建與配置

創建一個過濾器對象需要實現javax.servlet.Filter接口,同時實現Filter接口的三個方法。

過濾器的配置主要分為兩個步驟,分別為:聲明過濾器對象、創建過濾器映射。

網站訪問計數器

創建名為一個過濾器,實現網站訪問計數器的功能,字符過濾器?????? Java Web程序開發中,由于Web容器內部所使用編碼格式并不支持中文字符集,所以,處理瀏覽器請求中的中文數據,就會出現亂碼現象,如下圖所示。

創建AddServlet的類,處理添加圖書信息請求的Servlet對象Servlet監聽器簡介?????

監聽器的作用是監聽Web容器的有效期事件,因此它是由容器管理的。利用Listener接口監聽在容器中的某個執行程序,并且根據其應用程序的需求做出適當的響應。下表列出了ServletJS中的8Listener接口和6Event類。

Listener 接口

Event

ServletContextListener

ServletContextEvent

ServletContextAttributeListener

ServletContextAttributeEvent

HttpSessionListener

HttpSessionEvent

HttpSessionActivationListener

HttpSessionAttributeListener

HttpSessionBindingEvent

HttpSessionBindingListener

ServletRequestListener

ServletRequestEvent

ServletRequestAttributeListener

ServletRequestAttributeEvent

????? Servlet監聽器是當今Web應用開發的一個重要組成部分。它是在Servlet2.3規范中和Servlet過濾器一起引入的,并且在Servlet 2.4規范中對其進行了較大的改進,主要就是用來Web應用進行監聽和控制的,極大地增強了Web應用的事件處理能力

???? Servlet監聽器的功能比較接近JavaGUI程序的監聽器,可以監聽由于Web應用中狀態改變而引起的Servlet容器產生的相應事件,然后接受并處理這些事件。

?????? Servlet上下文監聽可以監聽ServletContext對象的創建、刪除以及屬性添加、刪除和修改操作,該監聽器需要用到如下兩個接口。

?????? 1ServletContextListener接口

?????? 2ServletAttributeListener接口

m 1 ServletContextListener 接口

該接口存放在javax.servlet包內,主要實現監聽ServletContext的創建和刪除。
ServletContextListener接口提供了兩個方法:

p contextInitialized ( ServletContextEvent event) 方法 :通知正在收聽的對象,應用程序已經被加載及初始化
p
p contextDestroyed ( ServletContextEvent event) 方法 :通知正在收聽的對象,應用程序已經被載出,即關閉
m ??? 2 ServletAttributeListener 接口

該接口存放在javax.servlet包內,主要實現監聽ServletContext屬性的增加,刪除和修改。
ServletContextListener接口提供了三個方法:

p attributeAdded ( ServletContext Attribute Event event) 方法: 當有對象加入 Application 的范圍時,通知正在收聽的對象
p attributeReplaced ( ServletContext Attribute Event event) 方法:當在 Application 的范圍有對象取代另一個對象時,通知正在收聽的對象
p attribute Removed ( ServletContext Attribute Event event) 方法:當有對象從 Application 的范圍移除時,通知正在收聽的對象

?????? HTTP會話監聽(HttpSession)信息,有4個接口可以進行監聽。

?????? 1HttpSessionListener接口

實現監聽HTTP會話創建、銷毀。

提供兩個方法:

sessionCreated(HttpSessionEvent event)方法:通知正在收聽的對象,session已經被加載及初始化

sessionDestroyed(HttpSessionEvent event)方法:通知正在收聽的對象,session已經被載出

?????? 2HttpSessionActivationListener接口

實現監聽HTTP會話activepassivate

提供了三個方法:

attributeAdded(HttpSessionBindingEvent event)方法:當有對象加入session的范圍時,通知正在收聽的對象

attributeReplaced(HttpSessionBindingEvent event)方法:當在session的范圍有對象取代另一個對象時,通知正在收聽的對象

attributeRemoved(HttpSessionBindingEvent event)方法:當有對象從session的范圍移除時,通知正在收聽的對象

?????? 3HttpBindingListener接口

實現監聽HTTP會話中對象的綁定信息,唯一不需要在web.xml文件中定義Listener

提供了兩個方法

valueBound(HttpSessionBindingEvent event)方法: 當有對象加入session的范圍時會被自動調用

valueUnBound(HttpSessionBindingEvent event)方法:當有對象從session的范圍內移除時會被自動調用

?????? 4HttpSessionAttributeListener接口

實現監聽HTTP會話中屬性的設置請求

提供了兩個方法:

sessionDidActivate(HttpSessionEvent event)方法:通知正在收聽的對象,它的session已經變為有效狀態

sessionWillPassivate(HttpSessionEvent event)方法:通知正在收聽的對象,它的session已經變為無效狀態

Servlet請求監聽

?????? 在Servlet 2.4規范中,新增加了一個技術,就是可以監聽客戶端的請求。一旦能夠在監聽程序中獲取客戶端的請求,就可以對請求進行統一處理。要實現客戶端的請求和請求參數設置的監聽需要實現兩個接口。

?????? 1ServletRequestListener接口

提供兩個方法

requestInitalized(ServletRequestEvent event)方法:通知正在收聽的對象,ServletRequest已經被加載及初始化

requestDestroyed(ServletRequestEvent event)方法:通知正在收聽的對象,ServletRequest已經被載出,即關閉

?????? 2ServletRequestAttributeListener接口??????

提供了三個方法:

attributeAdded(ServletRequest AttributeEvent event)方法:當有對象加入request的范圍時,通知正在收聽的對象

attributeReplaced(ServletRequest AttributeEvent event)方法:當在request的范圍內有對象取代另一個對象時,通知正在收聽的對象

attributeRemoved(ServletRequest AttributeEvent event)方法:當有對象從request的范圍移除時,通知正在收聽的對象

Servlet監聽器統計在線人數

??????? 監聽器的作用是監聽Web容器的有效事件,它由Servlet容器管理,利用Listener接口監聽某個執行程序,并根據該程序的需求做出適當的響應。下面為大家介紹一個應用Servlet監聽器實現統計在線人數的實例。??????

Servlet3.0 新特性

1新增注釋

????? Servlet 3.0中的重大革新之一,通過使用注釋就無需在web.xml文件中對Servlet或者過濾器進行配置。Servlet 3.0新增的注釋有@WebServlets@WebFilter@WebListener@WebInitParam等,下面分別為大家進行介紹。

???? 1@WebServlet注釋定義在Servlet的類聲明之前,用于定義Servlet組件。

???? 2@WebFilter注釋用于聲明過濾器,該注解將會在部署時被容器處理,容器將根據具體的屬性配置將相應的類部署為過濾器。

???? 3 @WebListener注釋用于聲明監聽器,該注釋用于充當給定web應用上下文中各種web應用事件的監聽器的類。

???? 4@WebInitParam注釋等價于web.xml文件中的<servlet><filter><init-param>子標簽,該注釋通常不單獨使用,而是配合@WebServlet或者@WebFilter使用。

2、對文件上傳的支持

????? 在Servlet3.0出現之前,處理文件上傳是一件很麻煩的事情,因為要借助第三方組件,例如commons fileupload等。而Servlet3.0出現以后就擺脫了這一問題。使用Servlet3.0可以十分方便的實現文件的上傳。

實現文件上傳需要以下兩項內容:

t? 1、需要添加@MultipartConfig注解。

t? 2、從request對象中獲取Part文件對象。

3、異步處理

????? 異步處理機制可以應用于Servlet和過濾器兩種組件,由于異步處理的工作模式與普通工作模式有著本質的區別,在默認情況下,并沒有開啟異步處理特性,如果希望使用該特性,則必須按如下的方法啟用:

????? 1@WebServlet@WebFilter注釋提供了asyncSupported屬性,默認該屬性的取值為false,要啟用異步處理支持,只需將該屬性設置為true即可。

????? 2、如果實現選擇在web.xml文件中對Servlet或者過濾器進行配置,可以在Servlet 3.0<servlet><filter>標簽增加了<async-supported>子標簽,該標簽的默認取值為false,要啟用異步處理支持,則將其設為true即可。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/164806.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/164806.shtml
英文地址,請注明出處:http://en.pswp.cn/news/164806.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用Wireshark提取流量中圖片方法

0.前言 記得一次CTF當中有一題是給了一個pcapng格式的流量包&#xff0c;flag好像在某個響應中的圖片里。比較簡單&#xff0c;后來也遇到過類似的情況&#xff0c;所以總結和記錄一下使用Wireshark提取圖片的方法。 提取的前提是HTTP協議&#xff0c;至于HTTPS的協議需要導入服…

【算法】摩爾投票算法

目錄 1.概述2.算法思想3.代碼實現3.1.t ?n / 2?3.2.t ?n / 3?3.3.t ?n / (m 1)? 4.應用 參考&#xff1a;LeetCode_多數元素 II 題解 1.概述 &#xff08;1&#xff09;摩爾投票法 (Boyer–Moore Majority Vote Algorithm) 是一種用來尋找一組元素中多數元素的常量級…

flutter,uni-app開發調試ios

一、申請ios開發者賬號 二、ios開發者配置 ios 開發者需要配置的地方 https://developer.apple.com/account/resources/certificates/list Certificates&#xff08;證書&#xff09;: 作用&#xff1a; 證書用于對應用程序和開發者進行身份驗證&#xff0c;確保安全性和可…

如何為您的企業選擇合適的多因素認證?

在傳統的網絡安全架構中&#xff0c;重點在于防止非法入侵&#xff0c;例如防火墻、VPN 、堡壘機等安全設備的重心都在于防止用戶違規訪問企業資源&#xff0c;一旦合法用戶的賬號密碼被入侵者拿到&#xff0c;就可以冒充合法用戶訪問企業資源&#xff0c;所有的安全設備形同虛…

springcloud超市管理系統源碼

技術說明&#xff1a; jdk1.8&#xff0c;mysql5.7&#xff0c;idea&#xff0c;vscode springcloud springboot mybatis vue elementui mysql 功能介紹&#xff1a; 后臺管理&#xff1a; 統計分析&#xff1a;查看用戶&#xff0c;商品&#xff0c;銷售數量&#xff1b;…

Mock 數據

1. Mock 數據的方式 2. json-server 實現 Mock 數據 項目中安裝json-server npm i -D json-server準備一個json文件添加啟動命令 //package.json"scripts": {"start": "craco start","build": "craco build","test&q…

簡單聊聊加密和加簽的關系與區別

大家好&#xff0c;我是G探險者。 平時我們在項目上一定都聽過加密和加簽&#xff0c;加密可能都好理解&#xff0c;知道它是保障的數據的機密性&#xff0c;那加簽是為了保障啥勒&#xff1f;它和加密有啥區別&#xff1f; 帶著這個疑問&#xff0c;我們就來聊聊二者的區別。…

SHEIN出口車鑰匙扣REACH認證指南解析

鑰匙扣的材料一般為金屬、皮革、塑料、橡膠、木頭等。此物精致小巧、造型千變萬化是人們隨身攜帶的日常用品。鑰匙扣是掛在鑰匙圈上的一種裝飾物品。鑰匙扣出口需要辦理REACH認證。 一、什么是REACH認證&#xff1f; REACH認證是歐盟28個成員國對進入其市場的所有化學品,&…

centos7中通過minikube安裝Kubernetes

minikube是一款開源的Kubernetes集群管理器&#xff0c;它可以幫助您在本地計算機上輕松部署和管理Kubernetes集群。以下是minikube的安裝和使用步驟&#xff1a; 安裝Docker&#xff1a;如果您還沒有安裝Docker&#xff0c;可以從Docker官方網站上下載并安裝適合您操作系統的…

Android和iOS應用程序加固方法詳解:混淆、加殼、數據加密、動態加載和數字簽名實現

目錄 Android和iOS應用程序加固方法詳解&#xff1a;混淆、加殼、數據加密、動態加載和數字簽名實現 APP 加固方式 iOS APP加固代碼實現 打開要處理的IPA文件 設置簽名使用的證書和描述文件 開始ios ipa重簽名 APP 加固方式 iOSAPP 加固是優化 iOS安全性的一種方法&…

C#枚舉的使用

在C#中經常會用到枚舉&#xff0c;是比較常用的定義一組常量集合的數據類型。我們使用枚舉可以更方便理解和閱讀代碼&#xff0c;增強代碼可讀性&#xff0c;也在某種程度上提升了編程邏輯和維度。 基本語法&#xff1a; enum MyEnum {Value1,Value2,Value3&#xff0c;//...…

CSS 實現文本框簽名

<div class"textarea-prepend"><textarea rows"6" placeholder"請輸入消息內容"></textarea></div>.textarea-prepend {position: relative;}.textarea-prepend textarea {width: 300px;}.textarea-prepend::before {ba…

UE4基礎篇十三:物理

一、筆記記錄 1.1 碰撞交互 阻擋會設置為阻擋的兩個(或更多)Actor之間自然發生。但是,需要啟用模擬生成命中事件(Simulation Generates Hit Events)才能執行事件命中 ,要兩個都相互設置阻擋模式才會生成命中事件 將Actor設置為重疊往往看起來它們彼此忽略,如果沒有生…

【陳老板贈書活動 - 18期】-如何成為架構師這幾本書推薦給你

陳老老老板&#x1f9b8; &#x1f468;?&#x1f4bb;本文專欄&#xff1a;贈書活動專欄&#xff08;為大家爭取的福利&#xff0c;免費送書&#xff09; &#x1f468;?&#x1f4bb;本文簡述&#xff1a;生活就像海洋,只有意志堅強的人,才能到達彼岸。 &#x1f468;?&am…

JavaScript基礎—引入方式、注釋和結束符、輸入和輸出、變量、常量、數據類型、檢測數據類型、類型轉換、綜合案例—用戶訂單信息

版本說明 當前版本號[20231123]。 版本修改說明20231123初版 目錄 文章目錄 版本說明目錄JavaScript 基礎 - 第1天介紹引入方式內部方式外部形式 注釋和結束符單行注釋多行注釋 結束符輸入和輸出輸出輸入 變量聲明賦值變量初始化更新變量 關鍵字變量名命名規則 常量數據類型…

什么是指針碰撞

程序員的公眾號&#xff1a;源1024&#xff0c;獲取更多資料&#xff0c;無加密無套路&#xff01; 最近整理了一波電子書籍資料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虛擬機》&#xff0c;《重構改善既有代碼設計》&#xff0c;《MySQL高性能-第3版》&…

WorkPlus實現完全私有化部署,企業數據安全有保障

在這個信息化飛速發展的時代&#xff0c;企業正面臨著越來越多的數據安全挑戰。為了確保數據的安全性和隱私性&#xff0c;WorkPlus迎合市場需求&#xff0c;推出了完全私有化部署方案&#xff0c;為企業提供了全面、可靠的安全保障&#xff0c;成為企業移動辦公的首選。 WorkP…

C#中的迭代器和分部類

目錄 一、迭代器 1.示例源碼 2.生成效果&#xff1a; 二、分部類 1.示例源碼 2.生成效果 迭代器在集合類中經常使用&#xff0c;而分部類則提供了一種將一個類分成多個類的方法&#xff0c;這對于有大量代碼的類非常實用。 一、迭代器 迭代器是可以返回相同類型的值的有…

LeetCode216. Combination Sum III

文章目錄 一、題目二、題解 一、題目 Find all valid combinations of k numbers that sum up to n such that the following conditions are true: Only numbers 1 through 9 are used. Each number is used at most once. Return a list of all possible valid combination…

《微信小程序開發從入門到實戰》學習二十五

3.3 開發創建投票頁面 3.3.13 使用頁面路徑參數 寫了很多重復代碼&#xff0c;現在想辦法將多選和單選投票頁面合二為一。 將單選頁面改造作為單選多選共同頁面。 修改index.js中的代碼&#xff0c;將路徑都跳轉到第一個單選頁面&#xff0c;帶上單選或多選的標志&#xff…