什么是過濾器
?????? Servlet過濾器與Servlet十分相似,但它具有攔截客戶端(瀏覽器)請求的功能,Servlet過濾器可以改變請求中的內容,來滿足實際開發中的需要。
?????? 對于程序開發人員而言,過濾器實質就是在Web應用服務器上的一個Web應用組件,用于攔截客戶端(瀏覽器)與目標資源的請求,并對這些請求進行一定過濾處理再發送給目標資源,過濾器的處理方式如下圖所示。
過濾器核心對象
????? 過濾器對象放置在javax.servlet包中,其名稱為Filter,它是一個接口。
????? 除這個接口外,與過濾器相關的對象還有FilterConfig對象與FilterChain對象,這個兩個對象也同樣是接口對象,位于javax.servlet包中,分別為過濾器的配置對象與過濾器的傳遞工具。過濾器創建與配置
創建一個過濾器對象需要實現javax.servlet.Filter接口,同時實現Filter接口的三個方法。
過濾器的配置主要分為兩個步驟,分別為:聲明過濾器對象、創建過濾器映射。
網站訪問計數器
創建名為一個過濾器,實現網站訪問計數器的功能,字符過濾器?????? Java Web程序開發中,由于Web容器內部所使用編碼格式并不支持中文字符集,所以,處理瀏覽器請求中的中文數據,就會出現亂碼現象,如下圖所示。
創建AddServlet的類,處理添加圖書信息請求的Servlet對象
Servlet監聽器簡介?????
監聽器的作用是監聽Web容器的有效期事件,因此它是由容器管理的。利用Listener接口監聽在容器中的某個執行程序,并且根據其應用程序的需求做出適當的響應。下表列出了Servlet和JS中的8個Listener接口和6個Event類。
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監聽器的功能比較接近Java的GUI程序的監聽器,可以監聽由于Web應用中狀態改變而引起的Servlet容器產生的相應事件,然后接受并處理這些事件。
?????? Servlet上下文監聽可以監聽ServletContext對象的創建、刪除以及屬性添加、刪除和修改操作,該監聽器需要用到如下兩個接口。
?????? 1、ServletContextListener接口
?????? 2、ServletAttributeListener接口
該接口存放在javax.servlet包內,主要實現監聽ServletContext的創建和刪除。
ServletContextListener接口提供了兩個方法:
該接口存放在javax.servlet包內,主要實現監聽ServletContext屬性的增加,刪除和修改。
ServletContextListener接口提供了三個方法:
?????? HTTP會話監聽(HttpSession)信息,有4個接口可以進行監聽。
?????? 1、HttpSessionListener接口
實現監聽HTTP會話創建、銷毀。
提供兩個方法:
sessionCreated(HttpSessionEvent event)方法:通知正在收聽的對象,session已經被加載及初始化
sessionDestroyed(HttpSessionEvent event)方法:通知正在收聽的對象,session已經被載出
?????? 2、HttpSessionActivationListener接口
實現監聽HTTP會話active和passivate
提供了三個方法:
attributeAdded(HttpSessionBindingEvent event)方法:當有對象加入session的范圍時,通知正在收聽的對象
attributeReplaced(HttpSessionBindingEvent event)方法:當在session的范圍有對象取代另一個對象時,通知正在收聽的對象
attributeRemoved(HttpSessionBindingEvent event)方法:當有對象從session的范圍移除時,通知正在收聽的對象
?????? 3、HttpBindingListener接口
實現監聽HTTP會話中對象的綁定信息,唯一不需要在web.xml文件中定義Listener的
提供了兩個方法
valueBound(HttpSessionBindingEvent event)方法: 當有對象加入session的范圍時會被自動調用
valueUnBound(HttpSessionBindingEvent event)方法:當有對象從session的范圍內移除時會被自動調用
?????? 4、HttpSessionAttributeListener接口
實現監聽HTTP會話中屬性的設置請求
提供了兩個方法:
sessionDidActivate(HttpSessionEvent event)方法:通知正在收聽的對象,它的session已經變為有效狀態
sessionWillPassivate(HttpSessionEvent event)方法:通知正在收聽的對象,它的session已經變為無效狀態
Servlet請求監聽
?????? 在Servlet 2.4規范中,新增加了一個技術,就是可以監聽客戶端的請求。一旦能夠在監聽程序中獲取客戶端的請求,就可以對請求進行統一處理。要實現客戶端的請求和請求參數設置的監聽需要實現兩個接口。
?????? 1、ServletRequestListener接口
提供兩個方法
requestInitalized(ServletRequestEvent event)方法:通知正在收聽的對象,ServletRequest已經被加載及初始化
requestDestroyed(ServletRequestEvent event)方法:通知正在收聽的對象,ServletRequest已經被載出,即關閉
?????? 2、ServletRequestAttributeListener接口??????
提供了三個方法:
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即可。